函数类型签名:() => void 不是箭头函数而是类型
interface 进行函数声明:
interface FuncFooStruct {
(name: string): number
}
推荐仅不返回时使用
rest 参数也可以使用元组
逻辑较复杂的情况下,函数可能有多组入参类型和返回值类型
如:
function func(foo: number, bar?: boolean): string | number {
if (bar) {
return String(foo)
} else {
return foo * 599
}
}
这里的类型签名完全没有体现这一点,我们只知道它的返回值是这么个联合类型
应该使用函数重载签名
function func(foo: number, bar: true): string
function func(foo: number, bar?: false): number
function func(foo: number, bar?: boolean): string | number {
if (bar) {
return String(foo)
} else {
return foo * 599
}
}
TypeScript 中的重载更像是伪重载,它只有一个具体实现,其重载体现在方法调用的签名上而非具体实现上
异步为 Promise<T>
,迭代器不重要
在构造函数中对参数应用访问性修饰符,参数会被直接作为类的成员(即实例的属性),免去后续的手动赋值:
class Foo {
constructor(public arg1: string, private arg2: boolean) {}
}
new Foo('linbudu', true)
TypeScript 4.3 新增了 override 关键字,来确保派生类尝试覆盖的方法一定在基类中存在定义
一个抽象类描述了一个类中应当有哪些成员(属性、方法等),一个抽象方法描述了这一方法在实际实现中的结构:
abstract class AbsFoo {
abstract absProp: string
abstract get absGetter(): string
abstract absMethod(name: string): string
}
无法声明静态的抽象成员。
interface 不仅可以声明函数结构,也可以声明类的结构:
interface AbsFoo {
absProp: string
get absGetter(): string
absMethod(input: string): string
}
class Foo implements AbsFoo {
absProp: string = 'linbudu'
get absGetter() {
return 'linbudu'
}
absMethod(name: string) {
return name
}
}