我知道在javascript中,我可以使用Object.assign()将字段从一个对象复制到另一个对象。
但是,我想做的是仅在此界面中获取属性:
export interface SizeOption {
width: number;
height: number;
unit: SizeUnit;
dpi?: number;
}
使用assign没有帮助,因为我有getter和setter方法,我不仅需要获取支持字段。
Object.create()可以同时获取字段和方法,但是我更愿意仅从界面中获取内容
答案 0 :(得分:3)
Typescript接口仅在编译时存在。您无法在运行时使用它们,必须手动指定要复制到其中的属性:
function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
const result = {};
for(const key of keys) result[key] = obj[key];
return result;
}
const result = pick(sizeOption, "weight", "height", "unit");
答案 1 :(得分:1)
通过使用解构,您只能从更通用的数据对象中提取所需的属性:
interface SizeOption {
width: number
height: number
dpi?: number
}
interface JSONData {
colors?:string
width:number
height:number
dpi?:number
title:string
source:string
}
// data from json has some unwanted properties
const data : JSONData = {
colors:"black",
height:300,
title:"help",
source:"img.jpg",
dpi:140,
width:400
}
// get only width height dpi from json
const {width, height, dpi} = data
// create sizeoption object
const size:SizeOption = {width, height, dpi}
console.log(size)
顺便说一下,您的用例并不十分清楚。如果您想要deep clone
,为什么不使用class
?