Мне интересно, должен ли каждый ключ в сопоставленном типе иметь определенное значение.
Я бы не ожидал, что это будет так, поскольку для этого потребовалось бы неизмеримо много значений. Однако тогда я бы ожидал, что Partial<T>
будет назначен сопоставленному типу T
, а это не так. Кроме того, при чтении значения из сопоставленного типа проверка typeof value === 'undefined'
не требуется.
type Mapped = { [key: string]: string };
// This works, so not all keys have to be defined
const mapped: Mapped = { 'a': 'b' };
// This is valid even with strict checks even though 's' is undefined
const s: string = mapped['c'];
const partialMapped: Partial<Mapped> = mapped;
// This doesn't work because `Partial<Mapped>` is of type `{ [key: string]: string | undefined }`
const secondMapped: Mapped = partialMapped;
Поскольку { 'a': 'b' }
может быть назначен переменной Mapped
, я ожидал бы, что Partial<Mapped>
также можно назначить Mapped
, но это не так. Это потому, что значение undefined
не совпадает с отсутствием ключа? Есть ли вариант на Partial
, который вместо этого делает ключи необязательными?