我正在阅读 TypeScript documentation 的这一部分, 在通用类型部分下,以下两个被声明为等价的:
代码示例 1
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: <T>(arg: T) => T = identity;
代码示例 2
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: {<T>(arg: T): T} = identity;
文档指出这是可能的,原因如下。
We can also write the generic type as a call signature of an object literal type
尽管有这一行,但我仍在努力理解这两者是如何等效的,是否有任何进一步的文档或解释“对象文字类型的调用签名”的含义。
很抱歉,我不能给出任何进一步的解释,但我对这两者是如何等价的一无所知,对我来说,第二个类型定义声明 myIdentity 应该是一个对象?
谢谢。
最佳答案
函数可以有属性,这就是对象字面量语法的用途:它允许定义调用签名和附加属性。您的两个示例是等效的,因为第二个示例没有在对象文字上定义其他属性。您可以在有关 hybrid types 的部分阅读更多相关信息.
此外,对象字面量允许为函数重载定义多个调用签名。您可以使用 Object.assign
创建此类接口(interface)的对象:
interface Foo {
(x: string): number,
(x: number): string,
bar: Array<any>,
}
const foo: Foo = Object.assign(function (x: any) {
if (typeof x === 'string') {
return parseInt(x);
} else {
return x.toString();
}
}, {
bar: []
});
关于javascript - 对象文字类型的调用签名是什么?它们如何与泛型类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967142/