admin管理员组

文章数量:1327661

Say I have this function definition:

export type ErrorValueCallback = (err: any, val?: any) => void;

a standard callback interface. And I can use it like so:

export const foo = function(v: string, cb:ErrorValueCallback){
    cb(null, 'foo');
};

But what if want to make this callback generic, something like this:

export type EVCallback = <T>(err: any, val: T) => void;

that syntax works, but when I try to use it:

export const foo = function(v: string, cb:ErrorValueCallback<string>){
    cb(null, 'foo');
};

I get an error

ErrorValueCallback is not generic

how do I what I am looking to do?

Say I have this function definition:

export type ErrorValueCallback = (err: any, val?: any) => void;

a standard callback interface. And I can use it like so:

export const foo = function(v: string, cb:ErrorValueCallback){
    cb(null, 'foo');
};

But what if want to make this callback generic, something like this:

export type EVCallback = <T>(err: any, val: T) => void;

that syntax works, but when I try to use it:

export const foo = function(v: string, cb:ErrorValueCallback<string>){
    cb(null, 'foo');
};

I get an error

ErrorValueCallback is not generic

how do I what I am looking to do?

Share Improve this question asked Jul 10, 2018 at 23:35 user7898461user7898461
Add a ment  | 

2 Answers 2

Reset to default 7

You need to add the generic to the type type ErrorValueCallback<T>

Fixed example

export type ErrorValueCallback<T> = (err: any, val: T) => void; // FIX

export const foo = function(v: string, cb:ErrorValueCallback<string>){
    cb(null, 'foo');
};

I think you wanted to use EVCallback instead

export type EVCallback<T> = (err: any, val: T) => void;

like this:

export const foo = function(v: string, EVCallback<string>){
    cb(null, 'foo');
};

本文标签: javascriptTypeScript create generic callback typeStack Overflow