刚开始使用Typescript,并为我的函数使用接口,如下所示:
interface StringFunction {
(arg1:string):string
}
如果我将该接口声明为变量,我可以将该接口附加到函数:
let testFunction:StringFunction = function(arg1) {}
但我无法弄清楚我是如何(或可以?)用命名函数来做的。这不起作用:
function testFunction:StringFunction(arg1) {}
有没有办法做到这一点?
答案 0 :(得分:2)
明确说明正在使用哪个接口的需要是名义类型系统的约束。 TypeScript是结构类型的,因此您无需显式声明函数实现接口。
例如,下面的testFunction
完全可以接受,需要StringFunction
- 并且编译器会检查它是否为。
interface StringFunction {
(arg1:string):string
}
function testFunction(arg1) { return ''; }
var x: StringFunction = testFunction;
以下示例说明是否发生类型检查:
interface StringFunction {
(arg1:string):string
}
function testFunction(arg1) { return 1; }
var x: StringFunction = testFunction; // Error
在这种情况下,testFunction
不兼容,编译器会发出警告。
附加说明:
在严格模式下,您的原始功能确实需要类型信息(但答案仍然适用)。
function testFunction(arg1: string) { return ''; }
仅在没有用于推断类型的上下文的情况下才需要这样做,因此以下工作在严格模式下,即使它看起来缺少类型注释。 string
上的arg1
类型是上下文类型。
var x: StringFunction = (arg1) => { return ''; };
答案 1 :(得分:0)
您可以这样做,但是命名函数的语法有些不同。
interface StringFunction {
(arg1:string): string
}
<StringFunction>function testFunction(arg1) {}
在这里,我们将testFunction
投射到界面上。 arg1
将是string
。
确保类型为之前 function
关键字。