#typescript
#typescript
Вопрос:
почему интерфейс не удалось расширить Record
interface Data {
a: string
}
Data extends Record<string, unknown> ? 'yes' : 'no' // 'no'
однако, если я изменю данные на тип, он будет работать нормально
type Data {
a: string
}
Data extends Record<string, unknown> ? 'yes' : 'no' // 'yes'
Комментарии:
1. 🙂 Странное поведение. Даже если вы замените
Data
интерфейс в условном наDataAsType
which will be:type DataGeneric<T> = T; type DataAsType = DataGeneric<Data>;
результат будет тем же. Но если вы заменитеData
на this{[key in keyof Data]: Data[key]}
, это дастyes
.
Ответ №1:
type T = Record<string, unknown>
вычисляется как { [x: string]: unknown; }
Типы объектов имеют неявную подпись индекса, но интерфейсы этого не делают (по соображениям безопасности), поэтому они не расширяют тип индекса.