阅读“宣布 TypeScript 4.9 Beta”
继续上次的, 宣布 TypeScript 4.9 Beta 我会读。
(只要有兴趣,我想继续……)
满足运算符
添加了一个新的“不影响类型推断,只是类型检查”运算符。
下面的示例检查 Record<string, number | number[]> 类型是否可赋值,但结果推断为 {hoge: number, fuga: number[]} 类型。
const sample = { hoge : 3 , fuga : [ 2 , 4 , 6 ], } satisfies Record < string , number | number [] > ; sample . fuga [ 2 ]; // 4
在上面的例子中,如果给样本 Record<string, number | number[]> 类型,会出现错误,因为 sample.fuga 可能是 number 类型。
const sample : Record < string , number | number [] > = { hoge : 3 , fuga : [ 2 , 4 , 6 ], }; sample . fuga [ 2 ]; // ERROR
我不知道这有多大用处,但就个人而言,我认为使用它来检查某个变量是否具有某种类型,而不是用于赋值会更有用。。
例如,模式匹配允许您检查是否详尽。这很容易,因为您可以在没有库的情况下做到这一点。
const sample = ( a : ' b ' | ' c ' | ' d ' ) => { if ( a === ' b ' ) return 1 ; if ( a === ' c ' ) return 2 ; a satisfies never ; // ERROR };
稍后,您还可以检查该函数的函数何时被调用。
const sample = ( f : ( a : string ) => ( b : number ) => void ) => { f ( ' hoge ' )( 3 ) satisfies void ; f ( ' hoge ' ) satisfies void ; // ERROR };
看起来不多,但是……也许你可以在想“这样可以吗?”的时候写出来。
不过在写的那一刻,我还是有些满足的,但是等冷静下来,代码就变得乱七八糟,感觉可读性快要下降了。 . .
暂时 await 也可以作为防遗忘的对策。
const asyncFunc = async () => {}; const sample = async () => { await asyncFunc () satisfies void ; asyncFunc () satisfies void ; // ERROR };
但是,如果您忘记了 await ,那么您似乎忘记了添加 satisfies 。那不是很现实吗? . .
使用 in 运算符缩小未列出的属性
in 运算符现在缩小未明确列出的属性。 (直到现在我都做不到……)
如下图,如果 Property 被显式声明, in 操作符已经有效地缩小了范围。
const sample = ( a : { b : string } | { c : number }) => { if ( ' b ' in a ){ a ; // {b: string} a . b ; // string } };
如果没有显式声明,则不会缩小,但会缩小到 object & Record<"b", unknown> 类型。
const sample = ( a : object ) => { if ( ' b ' in a ){ a . b ; // 4.8まではエラー } };
检查 NaN 是否相等
与容易出现错误的 NaN 的相等比较现在被视为错误。它会警告您正确使用 isNaN。
const sample = ( a : number ) => { if ( a === NaN ) return undefined ; // ERROR return a + 1 ; };
文件监视现在使用文件系统事件
似乎监视文件更改的机制将从轮询变为 OS 文件系统事件。直到那时的历史都被写了下来。
Promise.resolve 的更好类型
Promise.resolve 的返回类型已更改。
我已经尝试了一些事情,下面的代码有所作为。
以前,收到了 T | PromiseLike<T> 并返回了 Promise<T> ,但现在看来Promise 已经用 Awaited 正确解决了。
就我使用它而言,这不是问题,但库开发人员可能需要关注它。
const sample = () => { // 4.8 ではPromise<Promise<unknonw>>型 // 4.9beta ではPromise<unknonw>型 const a = Promise . resolve ({} as Promise < Promise < unknown >> ); };
其他
除了上述之外,还有其他项目,但我只会总结链接。
lib.d.ts 更新 JavaScript Emit 不再省略导入 出口优先于类型版本 替换为 SubstitutionTypes 上的约束原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628088.html
查看更多关于阅读“宣布 TypeScript 4.9 Beta”的详细内容...