【发布时间】:2020-10-16 11:45:07
【问题描述】:
我想将元数据与类中的属性相关联,特别是属性名称的缩写。
使用注释:@shortName(abbrevified) 可以标记每个属性:
function shortName(shortName: string){
return function (target: Object, realName: string){
// Where to store the relation realName <-> shortName ??
}
}
class Record{
@shortName("ts") typeOfStorage: string;
}
class Client extends Record{
@shortName("df") descriptiveField: string;
}
function mapNames(obj: any){ // Return object with shortened names
let ret = {};
for(let prop in obj){
//Here retrieve the short name and add to ret
}
return ret;
}
let client = new Client(); // supposing: { typeOfStorage: "f", descriptiveField: "blah"}
let clientShortened = mapNames(client); // expected: {ts: "f", df: "blah"}
问题是我在哪里以及如何存储这些关系,以便在派生类的实例中可以检索它们?
最初,我创建了一个以 target.constructor.name 为前缀的全局映射(它给出了类的名称)。但是在继承的类中,constructor.name 是继承的(所以在示例中client 我会忘记typeOfStorage
(这样做的用途是为了节省存储对象在非Sql DB-firestore-中存储每个对象记录的每个属性名称的空间)
【问题讨论】:
标签: typescript properties metadata