是否可以将 TypeScript 装饰器应用于类中的所有字段?

Vla*_*sky 6 typescript

我一直在摆弄 Typescript 中的装饰器,我有一个简单的问题,假设我有一个名为 的自定义装饰器RetainType和一个像这样的类:

class Person {
    @RetainType name: string;
    @RetainType age: number;
    @RetainType dateOfBirth: Date;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够写:

@RetainType class Person {
    name: string;
    age: number;
    dateOfBirth: Date;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,有没有办法将装饰器应用于类中的所有属性?我用来@RetainType发出有关各个属性的元数据(特别是设计:类型)。如果能有一种比逐个注释所有字段更简洁的方法就好了。

Vad*_*sky 1

属性装饰器应用于一个属性。它什么也不返回,只是用相关属性做一些事情。

类装饰器应用于类构造函数。因此它应该返回用某些功能替代普通构造函数的函数。

在类装饰函数中,您可以做任何事情 - 甚至枚举所有类属性并以预期的方式装饰它们。因此,如果编写额外的代码,您就可以做您想做的事。但是您不能将属性装饰器用作类装饰器而不更改它们。这是行不通的。