使用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()