条件类型 - 匹配特定的可空类型

时间:2018-04-04 04:19:38

标签: typescript

我试图匹配条件类型中的可空类型:

  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]>>

1 个答案:

答案 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];

我猜测编译器的限制是问题中的代码不起作用。