Как изменить все значения интерфейса в машинописи - PullRequest
0 голосов
/ 09 января 2020

Если у меня есть функция, которая принимает динамический c объект в качестве параметра.

const fun = <IValues>(values: IValues) => // IValues = {a: '', b: ''}

Я хотел бы использовать этот объект и клон с такими же ключами но разные значения:

//manage values to init valuesModified1 and valuesModified2
const originalValues: IValues = valuesModified1; // {a: 'foo', b: 'bar'}
const modifiedValues = valuesModified2; // {a: true', b: false}
return {originalValues, modifiedValues}

Моя проблема в том, чтоifiedValues ​​не имеет правильных типов.

Есть ли способ клонировать интерфейс, но изменить все значения его ключа?

РЕДАКТИРОВАТЬ: основываясь на ответе iY1NQ, я просто использовал : { [key in keyof IValues]: boolean }, и ошибки исчезли (возможно, не самый лучший решение, но это решение):

const fun = <IValues>(values: IValues) => // IValues = {a: '', b: ''}
    //manage values to init valuesModified1 and valuesModified2

    const originalValues: IValues = valuesModified1; // {a: 'foo', b: 'bar'}
    const modifiedValues: { [key in keyof IValues]: boolean }  = valuesModified2; // {a: true', b: false}
    return {originalValues, modifiedValues}
}

1 Ответ

1 голос
/ 09 января 2020

Изменяет тип каждого свойства на новый, указанный T:

const fun = <IValues, T>(values: IValues): { [key in keyof IValues]: T } => { 
    return ...;
} 

const result = fun<{ a: string }, boolean>({ a: "a"}); // => result: { a: boolean }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...