阅读“宣布 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>>);
};
其他
除了上述之外,还有其他项目,但我只会总结链接。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628088.html