@ Ответ DShook является неправильным (или, скорее, неполным), потому что OP запрашивает удалить null и undefined из свойств типов, а не из самого типа (явная разница).
Хотя ответ @ Fartab верен, я добавлю к нему, поскольку теперь есть встроенный тип Required
, и решение можно переписать так:
type RequiredProperty<T> = { [P in keyof T]: Required<NonNullable<T[P]>>; };
Это сопоставит свойства типов (не самого типа) и гарантирует, что каждый из них не является ни тем, ни другим; Нулевой или неопределенный.
Пример различия между удалением значений null и undefined из типа по сравнению с удалением их из свойств типов (с использованием указанного выше типа RequiredProperty
):
type Props = {
prop?: number | null;
};
type RequiredType = NonNullable<Props>; // { prop?: number | null }
type RequiredProps = RequiredProperty<Props>; // { prop: Required<number> } = { prop: number }