msq*_*qar 3 javascript typescript
我试图在过滤和映射时缩小和类型保护特定对象的属性,但我不完全理解如何做到这一点。
假设我得到了 Person 接口的以下对象数组:
interface IPerson {
name: string;
age: number;
height: number | null;
}
const personArray: IPerson[] = [...]
Run Code Online (Sandbox Code Playgroud)
假设我想首先过滤那些不为空的内容,然后映射结果并对过滤掉的内容执行一些操作。
personArray
.filter((person) => person.height !== null)
.map((person) => this.doSomethingAboutIt(person.height))
Run Code Online (Sandbox Code Playgroud)
该doSomethingAboutIt函数只需要一个数字,而不是空值。这就是为什么我想首先过滤非空。但 TypeScripts 显示一个错误,指出 doSomethingAboutIt 需要 a number,而不是 a number | null。甚至认为在映射函数期间不应该有任何空值。当然 TypeScript 还不知道这一点。我以为它会自动推断出来,但我错了。
如何将类型缩小为仅对象属性的数字?
谢谢。
小智 5
您需要按如下方式使用类型保护:
interface IPerson {
name: string;
age: number;
height: number | null;
}
const doSomethingAboutIt = (h: number) => {};
const personArray: IPerson[] = [];
personArray
.filter((person): person is IPerson & { height: number } => person.height !== null)
.map((person) => doSomethingAboutIt(person.height));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |