我想构建一些我称之为类型安全装饰器的东西(因为没有更好的术语)
class Implementor implements T {
public constructor(x: T) {
Object.assign(this, x)
}
}
有没有办法让 Typescript 编译器相信 assign
对 T
的实例进行处理会使 this
也是 T
的实例?
答案 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。