作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个从后端 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/
我是一名优秀的程序员,十分优秀!