Я пытаюсь заставить компилятор помочь мне с проверкой полезной нагрузки, полученной по сети. Итак, что я хочу сделать, это передать полезную нагрузку JSON по сети и убедиться, что компилятор жалуется, если все поля не установлены. Я знаю, что это можно сделать с помощью функций проверки, но еще до того, как я перейду к части проверки, мне нужно сгенерировать некоторый шаблон, который преобразует тип с полями, допускающими значение NULL, в тип со строгими полями. Таким образом, функции проверки должны иметь следующую подпись
type Validator<T> = (i: T) => Strictify<T>;
Проблема в том, что я не знаю, как заставить Strictify
работать. Когда я пишу следующее, это не работает
type Strictify<T> = {
[K in keyof T]: Exclude<T[K], undefined>
};
type Test = { k?: string };
type StrictTest = Strictify<Test>;
Тип StrictTest
должен быть { k: string }
, но на самом деле это все еще { k?: string }
. Самое интересное, что если я изменю определение Test
на { k: string | undefined }
, тогда это сработает. Строгий тип - это то, что я ожидаю. Кто-нибудь знает, как заставить все это работать, не расширяя каждые k?: T
до k: T | undefined
?