функция массива javascript (функция индексатора javascript C #) - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужна в машинописи (или, по крайней мере, в JavaScript) функция, которую я могу вызывать / использовать как массив: myFunc [someInput]

Я знаю, что я могу сделать что-то вроде:

interface IInputs {
    "someInput1": someType,
    "someInput2": someType,
}
interface someType {
    // ...
}
var myFunc: IInputs;

Итак, я могу написать:

myFunc["someInput1"]

Первая проблема заключается в том, что мне приходится жестко кодировать каждый возможный ввод.Ввод является строкой, но может быть любой строкой.Другая заключается в том, что моя функция должна вызывать другую («нормальную») просто так:

myFunc[input: string] : any {
    //...
    return anotherFunc(input);
}

Я упростил свою задачу, чтобы показать только соответствующие факты.

1 Ответ

2 голосов
/ 10 апреля 2019

Похоже, вы ищете Прокси :

function someOtherFunc(prop: string) {
    return "you said " + prop;
}

interface Indexable {
    [key: string]: any;
}


let myFunc: Indexable = new Proxy({}, {
    get(_, prop: string) {
        return someOtherFunc(prop);
    }
});


console.log(myFunc['hello'])
console.log(myFunc['hey'])

JS версия:

    function someOtherFunc(prop) {
        return "you said " + prop;
    }
    
    let myFunc = new Proxy({}, {
        get(_, prop) {
            return someOtherFunc(prop);
        }
    });
    
    
    console.log(myFunc['hello'])
    console.log(myFunc['hey'])
...