【发布时间】:2019-06-06 10:08:39
【问题描述】:
我正在尝试编写一个简单的函数,它返回一个defaultValue,如果是value === undefined。
功能超级简单:
const defaultIfUndefined = (value, defaultValue) => {
return value === undefined ? defaultValue : value;
}
但是打字/类型推断不起作用。
该函数应该简单地从类型中删除undefined。
我尝试了几种不同的方法,但总是有一些错误。
1.
const defaultIfUndefined = <T>(value: T, defaultValue: Exclude<T, undefined>): Exclude<T, undefined> => {
return value === undefined ? defaultValue : value;
}
2.
const defaultIfUndefined = <T, U extends Exclude<T, undefined>>(value: T, defaultValue: U): U => {
return value === undefined ? defaultValue : value;
}
3.
const defaultIfUndefined = <T, U extends T | undefined>(value: U, defaultValue: Exclude<U, undefined>): Exclude<U, undefined> => {
return value === undefined ? defaultValue : value;
}
4.
const defaultIfUndefined = <T, U extends T | undefined, V extends Exclude<U, undefined>>(value: U, defaultValue: V): V => {
return value === undefined ? defaultValue : value;
}
第一个例子运行良好,只要我return ... as any。
但是如果没有as any,有什么方法可以让它工作吗?
--
Link 到 TypeScript Playground
【问题讨论】:
标签: typescript generics type-inference typescript-generics