我有一个User类,它有一个修饰属性"name".我试图在父类(Base)构造函数中使用Object.assign初始化这个属性,但是值是"undefined".当我移除decorator 时,属性将使用正确的值初始化.参见下面的代码—我使用的是5.4.2版的Typescript .
有人能帮我一下吗?有什么办法能让这个工作吗?
谢谢.
// test.ts
(Symbol as any).metadata ??= Symbol("Symbol.metadata") // Polyfill
function Value(value: string) {
return (_target: any, context: ClassFieldDecoratorContext) => {
context.metadata![context.name] = value
}
}
class Base {
constructor(data: any) {
Object.assign(this, data)
}
}
interface IUser {
id?: string
name?: string
}
class User extends Base implements IUser {
id?: string
constructor(data: IUser) {
super(data)
}
@Value("test")
name?: string
}
const data = {
id: "1",
name: "John Doe"
}
const user = new User(data)
// user.id is 1
// user.name is undefined