#typescript
#typescript
Вопрос:
Я хочу скопировать объект и сопоставить его свойства типобезопасным способом. Я могу описать результирующий тип в TypeScript, но я не могу добиться сопоставления свойств без приведения.
Итак, рассмотрим, что у меня есть объект, который можно описать следующим образом:
interface MyObject {
a: number;
b: string;
}
Я хочу сопоставить все его свойства. На самом деле, я могу правильно описать сопоставление с помощью TypeScript:
type MappedObject = {[K in keyof MyObject]: {meta: string; value: MyObject[K]}};
Теперь я расширил все свойства MyObject
. Отлично. Теперь проблема в том, что я не могу применить это преобразование безопасным для типов способом:
const object: MyObject = {
a: 42,
b: 'foo',
};
const mapped = Object.fromEntries(
Object.entries(object).map(([k, v]) => [k, {meta: 'bar', value: v}]),
);
doSomethingWithMappedObject(mapped); // error
function doSomethingWithMappedObject(mapped: MappedObject): void {
// ...
}
На мой взгляд, результат Object.fromEntries(...)
должен был быть совместим с MappedObject
, но это не так. Как мы можем этого добиться, в идеале без приведения?