#typescript
Вопрос:
Мне бы хотелось, чтобы метод, который принимает объект и добавляет к нему свойство, например, это:
const augment = <T extends {}, K extends string>(obj: T, key: K): T amp; { [x in K]: string } => {
return { ...obj, [key]: "someString" };
};
Это не удается с
Type 'T amp; { [x: string]: string; }' is not assignable to type 'T amp; { [x in K]: string; }'.
Я понимаю, что key
это не сохраняет keyof K
аспект.
В идеальном мире, если я вызываю
const anObj = { aProp: 'aVal' };
const anotherObj = augment( anObj, "aKey" );
Я бы хотел, чтобы подпись anotherObj
была { aProp: 'aVal', aKey: string }
. В частности, когда ключевым аргументом является литерал.
Есть предложения?
Комментарии:
1. Насколько вас волнует обеспечение безопасности типов TypeScript в реализации
augment()
? Если вас устраивает сигнатура вызова, оставьте ее в покое и используйте утверждение внутри реализации, подобное (например) этому . Обратите внимание, что еслиkey
он имеет тип объединения, вы получаете неверные возвращаемые типы; вместо этого вам может понадобиться это , и если вы действительно хотите видеть расширенные свойства, вместоamp;
этого вам может понадобиться это . Если вы хотите, чтобы что-либо из этого было расширено в ответ, дайте мне знать.