#typescript #typescript-generics
Вопрос:
Следующий код:
type A = number | undefined
type B<C extends number> = C
let a: B<A>;
выдаст мне ошибку:
Type 'A' does not satisfy the constraint 'number'. Type 'undefined' is not assignable to type 'number'.
Можно ли предположить, что A будет определено, что-то вроде:
let a: B<A!>
// or
let a: B<NonNullable<A>>
?
Ответ №1:
Этот оператор ненулевого утверждения предназначен для использования для javascript
переменных. Использовать его для типов машинописи в принципе не имеет смысла.
Я почти уверен, что ваша проблема исходит из другого места, которое заставляет вас действовать таким образом и которое вам нужно решить вместо этого.
В любом случае, если вы хотите решить эту проблему быстро, вам может потребоваться использовать Exclude
тип утилиты.
Полное решение:
type A = number | undefined
type B<C extends number> = C
const a: B<Exclude<A, undefined>> = 234;