如何使用打字稿装饰装饰属性设置器

时间:2018-12-10 16:55:57

标签: typescript

这可能不是简单的打字稿,我已经写了大约2天的打字稿。

我希望能够获取一个对象并返回相同类型的对象,但是会在属性设置器中注入一些日志记录(或其他内容)。

即我想要像这样的对象;

interface Foo {
    data : string;
}

并返回类似a;

class DecoratedFoo implements Foo {
    foo : Foo;

    constructor(foo : Foo) { this.foo = foo } 

    set data(data:string) {
        console.log(data);
        this.foo.data = data;
    }
    get data():string {
        return this.foo.data;
    }
}

很明显,如果我传递的对象具有不同的类型,例如;

interface Bar {
    xyz : number;
}

我会得到等价的

class DecoratedBar implements Bar {
    bar : Bar;

    constructor(bar : Bar) { this.bar = bar; } 

    set xyz(xyz:number) {
        console.log(xyz);
        this.bar.xyz = xyz;
    }
    get xyz():number {
        return this.bar.xyz;
    }
}

我已经看过打字稿的一些高级打字功能,感觉就像;

function extend<T, U>(first: T, second: U): T & U {
    let result = <T & U>{};
    for (let id in first) {
        (<any>result)[id] = (<any>first)[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (<any>result)[id] = (<any>second)[id];
        }
    }
    return result;
}

但是我需要做类似的事情

function wrapWithLogging<T>(t : T) : T {
    let result = <T>{};
    for (let id in t) {
        (<any>result)[id] = ???
    }
}

我的打字稿可怜(我只是在尝试一些角度),我不懂JavaScript,我是C#等行业的后端开发人员

0 个答案:

没有答案