使用TypeScript中的函数初始化对象
假设我有一个类使用TypeScript中的函数初始化对象,typescript,nativescript,Typescript,Nativescript,假设我有一个类a,如下所示: export class A extends Observable { constructor( public id: string ) { super(); } public testCallFunction() { return "Function called on object with id " + this.id; } } 我可以像这样初始化一个A数组,函数将公开: this.data
a
,如下所示:
export class A extends Observable {
constructor(
public id: string
) { super(); }
public testCallFunction() {
return "Function called on object with id " + this.id;
}
}
我可以像这样初始化一个A
数组,函数将公开:
this.data = [new A("1"), new A("2")];
当我像这样初始化数组时,由于“类型错误”,它不允许我调用函数:
this.data=[{“id”:“1”},{“id”:“2”}]作为数组这是因为当您使用对象文字时,必须先创建A的所有属性和方法,然后typescript才能接受您的对象是A类型
这就是使用new
创建intance的原因。现在,您可以自动获取所有属性和方法
class A {
private id: string
constructor(id: string) {
this.id = id
}
public testCallFunction() {
return "Function called on A instance"
}
}
class Test {
private data: A[];
constructor() {
this.data = [new A("1"), new A("2")]
// typescript does not recognise this object
// as an A instance because it has no testcallFunction
// this.data = [{ "id": "1" }, { "id": "2" }]
var a:A = this.data[0]
a.testCallFunction()
}
}
更新
您可以使用Object.assign()
将属性从JSON添加到现有实例
class A {
public id: string
public testCallFunction() {
console.log("my id is " + this.id)
}
}
let a = new A()
let json = { "id": "1" }
Object.assign(a, json)
console.log("id is now " + a.id)
a.testCallFunction()
有趣。我希望从this.data=[{“id”:“1”},{“id”:“2”}]作为数组得到一个类型错误代码>然后,但我想不是。很好的小把戏:)那是因为你用作为。这用于从一种类型转换为另一种类型。当您将用作
时,您将否决默认类型检查!当您使用this.data:A[]=[…]
时,您将得到类型错误!我希望能够使用as
语法初始化我的大json数据文件,并且仍然能够访问这些方法。要手动公开它们而不在整个数据中循环创建新
对象吗?是否要从JSON数据创建A
实例?您可以使用Object.assign()
将通用对象中的所有属性添加到实例中。或者您可以重写A类以接受构造函数中的单个JSON对象
class A {
public id: string
public testCallFunction() {
console.log("my id is " + this.id)
}
}
let a = new A()
let json = { "id": "1" }
Object.assign(a, json)
console.log("id is now " + a.id)
a.testCallFunction()