我正在尝试保留回调参数的类型信息,其中回调是通用的:
function Foo<Template>(argument: Template) {
// Do something with argument
}
function Bar(callback: Function) {
callback('something')
}
let x = Bar( Foo<String> )
Run Code Online (Sandbox Code Playgroud)
这看起来不像有效的打字稿语法。有什么办法吗?
在这里扩展罗德里戈的答案。如果您有一个具有泛型的函数:
function doSomething<T>(t: T): void {
console.log("oh " + t);
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式定义函数的类型:
type Handler = <T>(t: T) => void;
Run Code Online (Sandbox Code Playgroud)
然后您可以将该类型Handler用作函数参数:
function thisFirst(callback: Handler) {
callback<string>('boink');
}
thisFirst(doSomething)
Run Code Online (Sandbox Code Playgroud)
您可以使用通用参数定义回调的通用函数,如下所示:
const handleSomething =
<T extends (...args: Parameters<T>) => ReturnType<T>>(callback: T) =>
(...args: Parameters<T>) =>
callback(...args)
Run Code Online (Sandbox Code Playgroud)
Function是任意函数。尝试指定回调。
function Foo<Template>(argument: Template) {
// Do something with argument
}
function Bar(callback: { (argument: string) }) {
callback('something')
}
let x = Bar(Foo);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4427 次 |
| 最近记录: |