老师,关于() => 和 (): , 接口和类的一点疑问
来源:3-21 泛型 - 泛型类+泛型约束

qq_慕函数5529610
2020-03-16
比如以下两种方式的区别是什么:
function create(c: { new(): T }): T {
return new c()
}
function create(c: new () => T): T {
return new c()
}
第一种用了{然后内部的: 不能用=>}
第二种没有中括号, => 又不能写成:
现在我的理解是带有{}这种写法是定义的接口,不带{} 将返回值写成=> 这种是类
好比说
let myIndentity: (arg: T) => T = identity
这种写法是定义myIndentity 的类型是一个 泛型的类类型(arg: T) => T
如果要定义成接口类型就要写成
let myIndentity:{(arg: T) : T} = identity
类实现接口默认实现的是类的实例成员.但是既然类也可以做类型, 接口也可以做类型,那具体区别是什么呢,类还要实现接口, 那直接用类做类型不是更方便
1回答
-
function create(c: { new(): T }): T {
return new c()
}
function create(c: new () => T): T {
return new c()
}
这两种写法作用应该是一样的,都描述了 c 的类型是一个构造函数类型,只不过第一种用了 : 号,为了和前面的 : 区分,加了一个括号括起来。
类和接口的主要区别是类是要有实现的,而接口只是对对象的一种描述,不包含实现。
举个例子,你用 TS 写了一个库想让别人使用,类型定义相关的 d.ts 文件主要提供的都是接口的定义。00
相似问题