тип проверить динамические свойства тип потока

Я пытаюсь добавить динамические свойства к объекту и проверить их тип потока:

моя функция будет такой:

function defineStuff(obj:MyType, keys:string[]):??? {
    keys.forEach(function(key) {
        Object.defineProperty(obj, key, {get:function(){....}});
        obj["Add"+key] = function(value) {....};
        obj["Remove"+key] = function(value) {....};
    }
    return obj;
}

Я хотел бы иметь возможность делать такие вещи;

var obj : MyType = fetchMyObj();
defineStuff(obj, ["Thing", "OtherThing"]);
var thing = obj.Thing;
obj.AddOtherThing(10);

все типы динамических свойств будут числовыми

есть ли синтаксис для этого в потоке? (т.е. как заполнить ???)


person M R    schedule 05.12.2017    source источник


Ответы (1)


Это должно работать для словарей.

type MyType = {[key: string]: number};

// ...
function defineStuff(obj: MyType, keys:string[]): MyType {
    keys.forEach(function(key) {
        Object.defineProperty(obj, key, {get:function(){....}});

        // you can't have functions here, because you say that all values should be numbers
        // obj["Add"+key] = function(value) {....};
        // obj["Remove"+key] = function(value) {....};
    }
    return obj;
}

// ...

См. документы

person Viktor Molokostov    schedule 29.01.2018
comment
к сожалению, MyType не является словарем {[string]:nuimber}, но содержит другие вещи. только добавленные свойства будут числами (и соответствующими функциями). В конце концов я отказался от этой проверки типов определений, поскольку у меня был внешний слой с полным типом (определяемым как тип пересечения того, что каждый компонент объявляет для примешивания) - person M R; 30.01.2018
comment
@MR, похоже, я вас неправильно понял, извините. В любом случае, то, что вы говорите о введении внешнего слоя, похоже, что FlowType вынудил вас сделать лучшее разделение задач, что, в конце концов, хорошо. - person Viktor Molokostov; 03.02.2018