如何从现有对象初始化打字稿类?
Posted
技术标签:
【中文标题】如何从现有对象初始化打字稿类?【英文标题】:How to initialize a typescript class from existing object? 【发布时间】:2021-08-15 03:37:58 【问题描述】:这可能看起来与之前的问题相似,但我没有找到答案,所以我在这里问了。 我的例子:
Class A
id:number;
name:string;
Class B
id:number;
name:string;
age:number;
grade:number;
const b = new B id:1, name:'John', age: 20, grade: 10
现在我想用 B 类的两个属性初始化 A 类的一个新实例。 像这样的:
const a = b as A;
我需要我的结果如下所示:
a = id:1, name:'John'
谢谢,
【问题讨论】:
【参考方案1】:代码
class A
id: number;
name: string;
constructor(id: number, name: string)
this.id = id;
this.name = name;
static toA<T extends id: number, name: string >( id, name : T): A
const newObject = new A(id, name);
return newObject;
说明
仅通过欺骗 TypeScript 是无法改变运行时结构的。 as
只是告诉 TypeScript “不要想太多,只要假设 b
为 A
”,TypeScript 不会做任何事情(包括为您编写 B 到 A 转换器),除非假设该对象的类型在类型检查(编译)时是A
。
所以,我们应该为它写一个显式的转换器。我们收到了包含必填字段的任何对象,然后使用这些字段创建一个新的 A
对象。
示例
class A
id: number;
name: string;
constructor(id: number, name: string)
this.id = id;
this.name = name;
static toA<T extends id: number, name: string >( id, name : T): A
const newObject = new A(id, name);
return newObject;
class B extends A
test: number;
constructor(id: number, name: string, test: number)
super(id, name);
this.test = test;
const b = new B(1, "hi", 2);
console.log(A.toA(b)); // A id: 1, name: 'hi'
【讨论】:
以上是关于如何从现有对象初始化打字稿类?的主要内容,如果未能解决你的问题,请参考以下文章