Мне интересно, должен ли каждый ключ в отображаемом типе иметь определенное значение.
Я бы не ожидал, что это будет так, поскольку для этого потребуется неоправданно много значений.Однако тогда я ожидал бы, что 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
вариант, который вместо этого делает ключи необязательными?