Как получить свойство, используя функцию типизированного объекта в машинописи - PullRequest
1 голос
/ 28 апреля 2020

Вот интерфейс:

interface {
    State?: string;
    Profession?: string;
}

Теперь я хочу использовать функцию getProperty для получения значения на основе ключа объекта.

function getProperty<Context, K extends keyof Context>(obj: Context, key: K): Context[K] {

    return obj[key];
}

let key: string = 'State';
getProperty(context, key);

Теперь он возвращает ошибку

> TSError: ⨯ Unable to compile TypeScript: index.ts:50:33 - error
> TS2345: Argument of type 'string' is not assignable to parameter of
> type '"State" | "Profession"'.

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Удалить key:string деталь

 let key:any = 'State'
0 голосов
/ 28 апреля 2020

getProperty функция определила второй параметр key как keyof Context, поэтому вам нужно определить переменную key аналогичным образом:

let key: keyof IContext = 'State';

Предполагая, что IContext является именем ваш интерфейс Полный пример будет выглядеть так:

interface IContext {
    State?: string;
    Profession?: string;
}

function getProperty<Context, K extends keyof Context>(obj: Context, key: K): Context[K] {

    return obj[key];
}

let key: keyof IContext = 'State'; // should not be a string
const context: IContext = {}; // instance of IContext

getProperty(context, key);
...