gpt4 book ai didi

typescript ,如何将对象传递给类的构造函数以进行实例化

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:16 26 4
gpt4 key购买 nike

我有一个从后端 api 获取的数组对象数据。喜欢:

[
{name: 'react', age: 4},
{name: 'angular', age: 4},
...
{name: 'rxjs', age: 2}
]

然后我定义了一个和一个接口(interface),像这样:

interface IBook {
name: string;
age: number;
}

class Book{
book: IBook;

constructor(book: IBook) {
this.book = book;
}

//I can definite some method here:

getFullName() {
return this.book.firstName + ' ' + this.book.lastName;
}

isValid() {
return book.name.length > 0;
}

}

//when get the data
const dataModels = datas.map(data => {
return new Book(data);
});

所以我可以封装一些数据模型方法,比如 book.getFullName()

我可以这样使用它:

const fullname = book.getFullName()

而不是这个:

const fullname = book.firstName + ' ' + book.lastName;

有更好的方法吗?我不确定我的想法是否正确。

问题是如何将一个js对象按照正确的方式转换为ts类模型。

或者,只定义数据接口(interface)。是否需要将javascript json数据转为typescript class模型?

-- 更新--

尤其是嵌套数据。像这样:

const datas = [
{name: 'react', age: 2, tag: [{id: 1}, {id: 2}]}
]

最佳答案

如果不需要任何方法,只需转换您的数据。否则,您可以将数据复制到您的类(class)。

let datas = [
{name: 'react', age: 4, extra: { value: 1 }},
{name: 'angular', age: 4, extra: { value: 2 }},
{name: 'rxjs', age: 2, extra: { value: 3 }}
]

interface IBook {
name: string;
age: number;
}

interface Extra {
value: number;
}

let books: IBook[] = datas;
console.log(books[0].name); // react

class Book {
name: string;
age: number;
extra: Extra;

constructor(data: any) {
for (let key in data) {
this[key] = data[key];
}
}

getFullName() {
return this.name;
}

isValid() {
return this.name.length > 0;
}
}

let books2 = datas.map(book => new Book(book));
console.log(books2[1].getFullName()); // angular
console.dir(books2[0].extra.value); // 1

关于 typescript ,如何将对象传递给类的构造函数以进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45474245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com