在下面的示例中,我使用用户定义的类型保护函数来过滤array.我想要一个只有Fish
的强类型array.
此处正确返回了类型,请注意,我使用的是无点样式:
const onlyFish = animals.filter(isFish); // Fish[]
此处未正确返回类型,它是一个混合数组:
const onlyFish2 = animals.filter(x => isFish(x)); // (Fish | Bird)[]
- 为什么会有这种不同?
- 如何确保只在onlyFish2中正确返回类型,而不执行
const onlyFish2: Fish[]
type Fish = {
variant: 'fish'
}
type Bird = {
variant: 'bird'
}
const isFish = (animal: Fish | Bird): animal is Fish => animal.variant === 'fish';
const animals: ReadonlyArray<Fish | Bird> = [{ variant: 'fish' }, { variant: 'bird' }];
const onlyFish = animals.filter(isFish); // Fish[]
const onlyFish2 = animals.filter(x => isFish(x)); // (Fish | Bird)[]