TypeScript
method-signature 方法签名
https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/method-signature-style.md
推荐永远使用第二种做方法签名
// method shorthand syntax
interface T1 {
func(arg: string): number;
}
// regular property with function type
interface T2 {
func: (arg: string) => number;
}
配合严格模式,防止异常的参数协变:
interface T1 {
func: (arg: string) => number;
}
type T2 = {
func: (arg: boolean) => void;
};
// this is equivalent to the overload
// 利用交叉类型做函数重载
interface T3 {
func: ((arg: number) => void) &
((arg: string) => void) &
((arg: boolean) => void);
}
subtyping 定义
Subtyping in TypeScript - 某兔的文章 - 知乎 https://zhuanlan.zhihu.com/p/371112840
我们在 上加上一个扩展叫做 subtyping,这个扩展添加了两个内容
- 新引入了一个类型与类型之间的关系,称为子类型关系, 我们用符号
<:
来表示。A 是 B 的子类型表示为 A <: B。 - 新引入一个类型
unknown
。
我们有时候叫 unknown 为 顶类型(Top Type),而且对于新引入的 <:
和 unknown
,我们同时添加了四条 Subtyping Rule 和一条 Typing Rule
Subtyping Rule:
- S-Top: 对于任何类型 :
- S-Arrow: 对于任何类型 : 如果 而且 ,那么
- S-Refl: 对于任何类型 :
- S-Trans: 对于任何类型 : 如果 而且 ,那么
Typing Rule:
- T-Sub:如果在上下文中我们得知 的类型是 , 并且 ,那么我们可以知道,在当下上下文中,能推出 的类型也是
S-Top: 所有类型通用超类型为 unknow
S-Refl:所有类型自己为自己的子类型
S-Trans:子类型关系传递
lamda 演算用 => 箭头函数表示
T1 是 S1 子类型
S2 是 T2 子类型
S1 => S2 是 T1 => T2 子类型
参数体 逆变,返回体 协变。
手把手教写 TypeScript Transformer Plugin - newraina的文章 - 知乎 https://zhuanlan.zhihu.com/p/30360931