gpt4 book ai didi

typescript - 从 TypeScript 中的类读取属性名称?

转载 作者:太空狗 更新时间:2023-10-29 18:34:59 25 4
gpt4 key购买 nike

在 TypeScript 中有一个类(例如 WikipediaSearchResult),是否可以访问它们?也许这个问题有点天真,但我想知道我是否可以编写没有重复属性名称的以下代码:

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);

当然有一些第 3 方库,例如 Underscore.js,但它不同于例如_.clone(...) 因为我只想克隆特定属性并忽略可能由 obj 分别提供的所有其他属性 from

另一种方法可能是使用例如_.create(WikipediaSearchResult.prototype, { title: 'Zürich' }),还没有尝试过,但它会使用 JavaScript prototype 属性。使用 TypeScript 内部机制会很棒。

我想到的一个想法是创建一个“虚拟”实例并读取它的 key 。我想知道是否有人提出了更好的变体?

最佳答案

初始化 WikipediaSearchResult 类的属性允许使用 this 作为"template":

function mergeTo(from:any, to:any={}, properties:Array<string>=[]) {
// same as in question
}

function mergeTo2(from:Object, to:Object):Object {
// _.keys from underscore
return mergeTo(from, to, _.keys(to));
}

class WikipediaSearchResult {

lang:string = undefined;
summary:string = undefined;
title:string = undefined;
wikipediaUrl:string = undefined;

constructor(obj?:any) {
util.mergeTo2(obj, this);
}

}

var result = new WikipediaSearchResult({
title: 'Zürich',
wikipediaUrl: 'https://en.wikipedia.org/wiki/Z%C3%BCrich'
});

console.log(result);

仍在寻找其他变体...

关于typescript - 从 TypeScript 中的类读取属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com