我在js中有一个克隆函数:
var clone = (o) => {
var obj = {};
for (var key in o) {
if (o.hasOwnProperty(key)) {
obj[key] = o[key];
}
}
return obj;
}
它的正确类型定义是什么,以保证克隆对象与输入对象的类型相同?或者我甚至需要调整实施?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您想要一个适用于JSON文字的版本,您可以使用以下内容:
var clone = <T>(o: T) => {
var obj = <T>{};
for (var key in o) {
if (o.hasOwnProperty(key)) {
obj[key] = o[key];
}
}
return obj;
}
如果您想要一个保留更复杂的类的版本,因为您使用{}
初始化结果,结果将具有不同的类型,因此instanceof MyClass
将不起作用。如果您有一个具有默认构造函数的对象,则可以使用:
var clone = <T>(o: T) => {
var obj : T = new (<any>o.constructor)();
for (var key in o) {
if (o.hasOwnProperty(key)) {
obj[key] = o[key];
}
}
return obj;
}
或者,如果您想强制使用默认构造函数,并且不介意在课程中传递,您也可以这样做:
var clone = <T>(o: T, ctor: new () => T) => {
var obj:T = new ctor();
for (var key in o) {
if (o.hasOwnProperty(key)) {
obj[key] = o[key];
}
}
return obj;
}
class AA {constructor(s: any) {}}
clone(new AA(1), AA); // Will cause an error