接口类型<T>是一个扩展全局类型功能的接口.我在关于全局函数的打字文档Function中找到了这一点.

上面的代码是什么意思?我是从ANGLE源代码中得到这段代码的.

export const Type = Function;
export function isType(v: any): v is Type<any> {return typeof v === 'function';}
export interface Type<T> extends Function { new (...args: any[]): T; }

我翻阅了Typescript 文档,但没有弄明白.

推荐答案

其定义是

interface Type<T> extends Function { new (...args: any[]): T; }

意味着类型Type<T>的值是也已知为类型T的实例的constructor的函数.因为它是Function interfaceextends,所以它是Function,而语法{ new (⋯): ⋯ }construct signature,所以它也是一个构造函数.

这意味着如果你有

declare const f: Type<Date>;

然后fFunction,并且具有Function的所有属性,如长度和绑定:

f.apply; // okay
f.call; // okay
f.bind; // okay
f.length; // okay

但它也是Date个对象的构造函数:

const d = new f();
//    ^? const d: Date;

话虽如此,我不知道为什么它是这样定义的.所有构造函数类型自动继承自Function;您不需要声明它.无论如何,你只能在函数上使用the new operator.classes只是一些特殊的功能:

class Foo {}; 
console.log(typeof Foo) // "function"

这意味着定义

interface Type<T> { new(...args: any[]): T; }

的行为与您的版本相同.也许它是这样定义的,以使与Function的关系变得明确?不太确定.但这超出了所问问题的范围.

Playground link to code

Typescript相关问答推荐

我应该使用什么类型的React表单onsubmit事件?

找不到带名称的管道''

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

根据上一个参数值查找参数类型,也返回类型

如何在TypeScrip中从字符串联合类型中省略%1值

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

是否可以基于对象的S属性值[]约束对象的其他属性值用于类型化的对象数组?

使用动态输出类型和泛型可重用接口提取对象属性

如何以Angular 导入其他组件S配置文件

重载函数的T helper参数

如何将对象数组中的键映射到另一种对象类型的键?

将布尔值附加到每个对象特性

编剧- Select 动态下拉选项

如何在Deno中获取Base64图像的宽/高?

如何创建一个将嵌套类属性的点表示法生成为字符串文字的类型?

仅当定义了值时才按值筛选数组

Typescript:是否将联合类型传递给重载函数?

如何限定索引值必须与相应属性的id字段相同

带有过滤键的 Typescript 映射类型

typeof 运算符和泛型的奇怪行为