在TypeScript中怎样定义补类型
TypeScript 目前没有这个功能(有一个类似的提案 Subtraction types · Issue #4183 · Microsoft/TypeScript),但是可以通过函数重载来模拟类似的效果:
【在TypeScript中怎样定义补类型】
例如在上面的例子中,如果传入空字符串获取到的是一个 never type,而对其它字符串返回正常的结果。
不过,如果函数的功能不依赖于返回值的话,那这个方法就没用了。
■网友
泻药,不过不懂ts。在dotty里我倒是能够实现类似这样的东西。。。
Enforce type difference
借助隐式和 implicit function type 完全可以做出不弱于Kotlin中空安全的效果。
■网友
你要是想丢 runtime error 还不如直接 assert(str.length \u0026gt; 0)
■网友
现在版本能判断基于对象的键的补类型虽然不能用在与string和空字符串export type WithOutKey\u0026lt;A, B extends PropertyKey\u0026gt; = Pick\u0026lt;A, Exclude\u0026lt;keyof A, B\u0026gt;\u0026gt;type x = WithOutKey\u0026lt;{ a: 1, b: 2 }, \u0026gt;
这里的x就是{ a : 1 }了
或者2个对象,写起来废话多点export type Minus\u0026lt;A, B\u0026gt; = Pick\u0026lt;A, Exclude\u0026lt;keyof A, keyof B\u0026gt;\u0026gt;type y = Minus\u0026lt;{ a: 1, b: 2 }, { b: any }\u0026gt;
来自于Subtraction types · Issue #4183 · Microsoft/TypeScript这个issue的最下面几句
Playground · TypeScript重点还是在于官方的/** * Exclude from T those types that are assignable to U */type Exclude\u0026lt;T, U\u0026gt; = T extends U ? never : T;
和 keyof 和 数组 返回的是联合类型
如果要用来判断空字符串用这个type NotEmptyStr\u0026lt;T\u0026gt; = T extends \u0026#39;\u0026#39; ? never : T// type NotEmptyStr\u0026lt;T\u0026gt; = Exclude\u0026lt;T, \u0026#39;\u0026#39;\u0026gt;type a = NotEmptyStr\u0026lt;\u0026#39;\u0026#39;\u0026gt;type b = NotEmptyStr\u0026lt;\u0026#39;asd\u0026#39;\u0026gt;type c = NotEmptyStr\u0026lt;\u0026#39;\u0026#39; | \u0026#39;asd\u0026#39;\u0026gt;
a 是 neverb 和 c 是 \u0026#39;asd\u0026#39;
url有引号会出bug,所以用括号括起来
Playground · TypeScript
其实我觉得基于完整对象类型的判断也做的出来试了下,还真做出来了export type KeyExpand\u0026lt;A\u0026gt; = { : { : A } }export type Expand\u0026lt;A\u0026gt; = KeyExpand\u0026lt;A\u0026gt;export type KeyPack\u0026lt;E\u0026gt; = E extends infer O ? keyof O : anyexport type Minus\u0026lt;A, B\u0026gt; = Pick\u0026lt;A, KeyPack\u0026lt;Exclude\u0026lt;Expand\u0026lt;A\u0026gt;, Expand\u0026lt;B\u0026gt;\u0026gt;\u0026gt;\u0026gt;type a = Minus\u0026lt;{ a: 1, b: 2, c: 3 }, { b: 2 }\u0026gt;// {// a: 1;// c: 3;// }
Playground · TypeScript
■网友
啥啥啥?TypeScript有这么牛逼的type system?
我个人直觉的话……
会报错,where
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义