我有这个代码片段,但是return arg
行有编译错误
type Foo<T> = T | Error
type Successful<A> = Exclude<A, Error>
const fn = <S>(arg: Foo<S>): Successful<Foo<S>> => {
if (arg instanceof Error) {
throw new Error()
}
return arg
}
Type 'S' is not assignable to type 'Exclude<S, Error>'.(2322)
为什么编译器不能理解arg
应该是S
类型,只有在保护以缩小类型范围之后?
示范操场
1条答案
按热度按时间63lcw9qa1#
Typescript编译器不能理解arg应该是条件后的成功类型。如果TS能自动理解就好了。但这是他工作的细节
使用类型Assert