typescript这个语法怎么理解?

function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
    return class extends constructor {
        newProperty = "new property";
        hello = "override";
    }
}
<T extends {new(...args:any[]):{}}>(constructor:T)

这句语法好奇怪,可以解释下吗?

class extends constructor

这又是什么?class extends?

阅读 6k
2 个回答

我在看 typescript 装饰器的时候也看到这个例子,这个函数的作用 是说 重载构造函数(真是高端...)

extends 是关键字, 这个关键字可以实现泛型约束。

{new(...args:any[]):{}} 是用来描述约束条件的。

new (...args: any[]) 是 a mixin constructor type, mixin constructor type 是 TypeScript 2.2 新增

new (...args: any[]) 表示 传入的类型是 mixin constructor type

:{} 表示 这个 a mixin constructor type 返回值类型 是 对象

先说第一个问题<T extends {new(...args:any[]):{}}>(constructor:T)这里外面的尖括号这是ts的泛型语法,具体的语法规则看这里...args,这里一小段是ECMAScript6的扩展运算符语法,具体的规则看这里

第二个问题class extends constructor这个是ECMAScript6的类继承语法,具体的语法规则看这里