在TypeScript中有一个类(例如WikipediaSearchResult
),它可以访问它们吗?也许这个问题有点幼稚,但我想知道如果我能不重复的属性名称写下面的代码:在TypeScript中从类中读取属性名称?
function mergeTo(from:any, to:any={}, properties:Array<string>=[]) {
if (!!from) {
for (var property of properties) {
// no deep copy here ;-)
to[property] = from[property];
}
}
}
class WikipediaSearchResult /* implements IWikipediaSearchResult */ {
lang:string;
summary:string;
title:string;
wikipediaUrl:string;
constructor(obj?:any) {
mergeTo(obj, this, [
// --> How to avoid this list? <--
'lang', 'summary', 'title', 'wikipediaUrl'
]);
}
}
var result = new WikipediaSearchResult({
title: 'Zürich',
wikipediaUrl: 'https://en.wikipedia.org/wiki/Z%C3%BCrich'
});
console.log(result);
当然也有一些第三方库,如Underscore.js,但它例如不同_.clone(...)
因为我只想克隆特定属性并忽略obj
分别提供的所有其他属性from
。
另一种方法可能是使用例如_.create(WikipediaSearchResult.prototype, { title: 'Zürich' })
,还没有尝试过,但它会使用JavaScript原型属性。使用TypeScript内部机制会很好。
我想出的一个想法是创建一个“虚拟”实例并阅读它的关键。我想知道是否有人提出更好的变体?
你为什么不重复从? '(var property in from){ to [property] = from [property]; }' –
'from'('any')可能有更多的属性,不应该在'to'中设置 –