构建类型安全装饰器

时间:2021-02-23 08:50:43

标签: typescript

我想构建一些我称之为类型安全装饰器的东西(因为没有更好的术语)

class Implementor implements T {
    public constructor(x: T) {
         Object.assign(this, x)
    }
}

有没有办法让 Typescript 编译器相信 assignT 的实例进行处理会使 this 也是 T 的实例?

1 个答案:

答案 0 :(得分:0)

我对 TypeScript 不是很精通,但我认为只有使用肮脏的技巧才有可能:

class Implementor {
    public implement<T>(x: T): Implementor & T {
        Object.assign(this, x);
        return this as unknown as Implementor & T;
    }
}

class Foo {
    public bar = "test";
}

const foo: Foo = new Foo();

const impl1: Foo = new Implementor().implement(foo);
console.log(impl1);

const impl2: Implementor = new Implementor().implement(foo);
console.log(impl2);

工作示例 here