#typescript
#typescript
Вопрос:
Иногда я создаю тип, чтобы выполнить какую-то проверку входных данных, которые, как я ожидаю, будут переданы.
// Library code
type Validate<T> = T extends Something ? T : never
// User code
type MySpecificType = Validate<{/* ... */}> // never if the shape was wrong.
// later on...
const instance : MySpecificType
libraryApi(instance) // error, never. But should happen sooner.
Это помогает в выводе типов для более крупных и сложных типов. Если у кого-то есть ошибка в форме типа, то в итоге они получат never . Проблема в том, что ошибка типа while возникает в какой-то момент в потоке, когда они пытаются назначить или использовать ее в функции, а не там, где они создают тип.
Существуют ли какие-либо другие способы короткого замыкания этого процесса только с типами? Иногда я работаю в основном с типами, поэтому нет значений для передачи функции.
Ответ №1:
Вы могли бы просто ограничить T
параметр extend
нужным типом, это выдаст ошибку при передаче типа в Validate
interface Something {
x: string;
}
// Library code
type Validate<T extends Something> = T
// User code
type MySpecificType = Validate<{ x: string, y: number}>
type MySpecificTypeErr = Validate<{ x: number, y: number}> // err