TypeScript, функция как свойство объекта - PullRequest
0 голосов
/ 16 июня 2020

Я хотел бы сохранить функции в объекте и получить к ним доступ с помощью клавиши без вызова.
У меня есть объект с именем methods с функциями, хранящимися с помощью клавиши string. Он работает, если функция назначена вручную methods["myMethod"], но если я попытаюсь назначить ее переменной string, я получаю ошибку:

element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ myMethod: () => void; }'.. Как мне это понять?

const args = parse(Deno.args);

// Should I define type somehow? 
// Maybe something like object<string;Function> in C-like languages?
const methods = {
    "myMethod": (): void =>{
        console.log("WOOOW");
    }
}

if (args.m) {
    const methodName: string = args.m;

    // works
    const method: Function = methods["myMethod"];

    // Error: element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ myMethod: () => void; }'.
    const methodFromArgs: Function = methods[methodName];

    // go
    method();
}

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Я определил methods с типом { [key: string]: Function } вместо any по умолчанию, и он работает нормально.
Пока я новичок в TypeScript, я не уверен, что это лучшая практика.

const methods: { [key: string]: Function } = {
    "myMethod": (): void => {
        console.log("WOOOW");
    }
}

if (args.m) {
    const methodFromArgs: Function = methods[args.m];
    methodFromArgs();
}
0 голосов
/ 16 июня 2020

это может вам помочь.

`
 const getVal = <U extends keyof T, T extends object>(key: U) => (obj: T) =>
 obj[key];
 const user: details = {
    name: "abc",
    age: 25
 };   

 const getUserDetails = getVal<keyof details, details>("name")(user);

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