我试图匹配条件类型中的可空类型:
dispatch(HANDLE_NUMBER_CHANGE(e.target.value).
但是我收到了这个错误...
错误TS2344:键入' NonNullable< T [K]>'不满足约束' Unwrapped'。
键入' T [K]'不能分配类型' Unwrapped'。
...传递interface Unwrapped { dummyProp: string; }
interface UnwrappedArray<T extends Unwrapped> extends Array<T> { }
interface Wrapped<T extends Unwrapped> { unwrapped: T; }
type ToPropertyWrapped<T, K extends keyof T> =
T[K] extends UnwrappedArray<infer ArrayElementType> ? Wrapped<ArrayElementType>[] :
T[K] extends Unwrapped ? Wrapped<T[K]> :
NonNullable<T[K]> extends Unwrapped ? Wrapped<NonNullable<T[K]>> | undefined :
T[K];
时。如何消除此编译错误?
Wrapped<NonNullable<T[K]>>
答案 0 :(得分:0)
我发现这样做的当前方法是使用类型参数作为别名:
type ToPropertyWrapped<T, K extends keyof T, NonNullableValue = NonNullable<T[K]>> =
T[K] extends UnwrappedArray<infer ArrayElementType> ? Wrapped<ArrayElementType>[] :
T[K] extends Unwrapped ? Wrapped<T[K]> :
NonNullableValue extends Unwrapped ? Wrapped<NonNullableValue> | undefined :
T[K];
我猜测编译器的限制是问题中的代码不起作用。