两者之间有什么区别?
正在做
A)
let myAdd: (x: number, y: number) => number =
function(x: number, y: number): number { return x + y; };
只需这样做:
B)
let myAdd = function(x: number, y: number): number { return x + y; };
我是从打字稿documentation中摘录的。为什么片段 A 中的代码有用?我只是在其中看到了一些冗余,就像在代码片段 B 中那样,键入了参数,还键入了返回值。
给我的印象是,在代码段 A 中,参数的输入和结果值进行了两次。
我不明白为什么 A 与 B 不同,或者为什么 A 比 B 更有用
答案 0 :(得分:2)
两个示例之间没有区别。在这两种情况下,myAdd
具有相同的类型(x: number, y: number) => number
。
文档中的示例仅与如何编写函数类型有关。在此示例中,指定类型不是特别有用,但是您可以对类型进行其他操作。您可以将其放在类型别名中并重复使用:
type MyOp = (x: number, y: number) => number;
let myAdd: MyOp = function (x: number, y: number): number { return x + y; };
let mySubtract: MyOp = function (x: number, y: number): number { return x - y; };
您也不能在声明时初始化函数:
let myOp: (x: number, y: number) => number;
declare let condition: boolean;
if (condition) {
myOp = function (x: number, y: number): number { return x + y; };
} else {
myOp = function (x: number, y: number): number { return x - y; };
}
另外,当您具有函数类型时,不需要指定参数类型:
let myOp: (x: number, y: number) => number = function (x, y) { return x + y;}
答案 1 :(得分:-1)
基本上,“ A”代码段用于为myAdd函数创建类型。如果您在没有类型的情况下定义myAdd函数,则可以在之后将其重新分配为任何值或数据类型。也许您希望myAdd应该使用两个数字参数并返回一个数字。但是,如果您不分配类型,则可能会不小心将其分配给其他类型。