javascript - 对象文字类型的调用签名是什么?它们如何与泛型类型一起使用?

标签 javascript typescript object generics object-literal

我正在阅读 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/

相关文章:

javascript - JavaScript 保证对象属性顺序吗?

javascript - 将js文件链接到hbs文件

javascript - 如何在 Onclick 上获取选择器的变量

javascript - 从对象数组动态创建对象数组,按对象属性排序

reactjs - 在 TypeScript 中使用带有子组件的 forwardRef 组件

typescript 文字类型和加法赋值运算符

javascript - jQuery UI switchClass 在 IE8 下失败

javascript - typescript /Javascript : Default for Map-miss

javascript - 在 IE 中获取多维 javascript 数组的值

javascript - 请解释一下这个 Javascript 语法是什么,其中对象作为函数声明中的参数放置