TypeScript中作为返回参数的“ typeof SomeClass”的解释

时间:2019-03-14 11:47:11

标签: typescript sequelize.js

JS中的

typeof返回一个字符串。 Sequelize的TypeScript类型的返回类型为typeof Model。这是什么意思?我在文档中找不到解释。

https://github.com/sequelize/sequelize/blob/830357553d15ecf41652ec997926bd5cf442eb17/types/lib/sequelize.d.ts#L1021

https://github.com/sequelize/sequelize/blob/830357553d15ecf41652ec997926bd5cf442eb17/types/lib/model.d.ts#L311

谢谢。

1 个答案:

答案 0 :(得分:1)

类名表示类的实例类型(即,该表达式的结果的类型,例如new Model())。

但是类本身也有一个类型。此类型包含构造函数签名以及该类的静态成员。要获得此类型,您需要使用typeof ClassName

返回typeof Model的函数意味着它将返回一个从Model派生的新类(不是类的实例)。

然后您可能要做的就是实例化该类:

let myModelClass = define(...);
let myModelInstance = new myModelClass()

注意:如果您需要这样定义的类的实例类型,则需要使用InstanceType<typeof myModelClass>。这是因为只有类声明会添加具有相同名称的类型,而变量不会以任何方式定义这种类型。可能有助于为其定义类型别名,以使其以更预期的方式工作:

let myModel = define(...);
type myModel = InstanceType<typeof myModel>
let myModelInstance: myModel = new myModel()