假设我有这门课:
class Foo {
bar = this.createDynamicFunction((param: string) => {
return "string" + param;
});
baz = this.createDynamicFunction((param: number) => {
return 1 + param;
});
createDynamicFunction(fn: (param: any) => any) {
return (param) => fn(param);
}
}
const foo = new Foo()
foo.bar('baz') // => barbaz
foo.baz(2) // => 3
如何声明函数 Foo.prototype.bar
和 Foo.prototype.baz
的类型?我想明确表示 bar
和 baz
分别接受并返回 string
和 number
。
我意识到这是一个人为的例子。对于某些上下文,我正处于重写消息队列客户端库之一的最后阶段,并且许多类函数是动态创建的。这些函数共享许多功能,但它们的输入/输出不同。
最佳答案
Generics是为此而设计的:
class Foo {
bar = this.createDynamicFunction((param: string) => {
return "string" + param;
});
baz = this.createDynamicFunction((param: number) => {
return 1 + param;
});
createDynamicFunction<Type>(fn: (param: Type) => Type) {
return (param : Type) => fn(param);
}
}
const foo = new Foo()
//console.log(foo.baz(2)) // => 3
console.log(foo.bar('baz')) // => barbaz
console.log(foo.baz(2)) // => 3
您创建一个通用
函数,其类型可以是任何类型。您可以根据该类型定义整体函数类型
关于typescript - 为动态创建的类函数声明显式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70502989/