在 TypeScript 中,我可以将函数的参数声明为函数类型。有没有我想念的“类型安全”的方式来做到这一点?例如,考虑一下:
class Foo { save(callback: Function) : void { //Do the save var result : number = 42; //We get a number from the save operation //Can I at compile-time ensure the callback accepts a single parameter of type number somehow? callback(result); } } var foo = new Foo(); var callback = (result: string) : void => { alert(result); } foo.save(callback);
保存回调不是类型安全的,我给它一个回调函数,其中函数的参数是一个字符串,但我传递给它一个数字,并且编译没有错误。我可以在保存类型安全函数中设置结果参数吗?
TL;DR 版本:TypeScript 中是否有一个等效的 .NET 委托?
当然。函数的类型由其参数的类型和返回类型组成。这里我们指定callback参数的类型必须是“接受数字并返回类型的函数any”:
callback
any
class Foo { save(callback: (n: number) => any) : void { callback(42); } } var foo = new Foo(); var strCallback = (result: string) : void => { alert(result); } var numCallback = (result: number) : void => { alert(result.toString()); } foo.save(strCallback); // not OK foo.save(numCallback); // OK
如果你愿意,你可以定义一个类型别名来封装它:
type NumberCallback = (n: number) => any; class Foo { // Equivalent save(callback: NumberCallback) : void { callback(42); } }