javascript - 为什么我不能投射使用 TypeScript 传播的对象的结果?
问题描述
不是重复的
我的问题与尝试查找对象的类型或类名无关。我的问题是关于将对象“强制转换”为类型——这源于对 TypeScript 及其工作原理的误解。这也与施法时使用对象传播有关。
原始问题
我想使用对象传播将数据从服务器映射到我的客户端上定义的类。我试图避免将数据传递给构造函数并使用循环映射每个属性,如此处所示。我尝试了以下方法:
//Data from server
var data = [
{id: 1, name: "Book 1", authorName: "Author 1",
steps: [
{id: 1, name: "Step 1"},
{id: 2, name: "Step 2"}
]},
{id: 2, name: "Book 2", authorName: "Author 2",
steps: [
{id: 1, name: "Step 1"},
{id: 3, name: "Step 3"}
]}
];
interface IBook {
id: number;
name: string;
authorName: string;
steps:IStep[];
}
interface IStep {
id: number;
name: string;
status: string;
processing: boolean;
}
class Book implements IBook {
id: number;
name: string;
authorName: string;
steps : Step[] ;
}
class Step implements IStep {
id: number;
name: string;
status: string = "unknown";
processed: boolean = false;
}
var list : Book[] = data.map(bitem=> {
var book = <Book>{ ...bitem, ...new Book() } as Book;
console.log(book) //Shows 'object' not 'Book'
var steps = bitem.steps.map(sitem => <Step>{ ...sitem, ...new Step() } as Step;);]
book.steps = steps;
return book;
}
console.log(typeof list[0]); //Expect 'Book' but get 'object'
我很好奇为什么强制转换类型会Book
产生一个object
?有没有简单的方法来完成这个,还是我需要使用构造函数来完成这种映射?
解决方案
这段代码怎么样,您可以通过constructor
以下技术将对象传递给并创建相同的实例
class Book implements IBook {
id: number;
name: string;
authorName: string;
steps : Step[] ;
constructor(params: IBook) {
Object.assign(this, params);
}
}
class Step implements IStep {
id: number;
name: string;
status: string = "unknown";
processing: boolean = false;
constructor(params: IStep) {
Object.assign(this, params);
}
}
var list : Book[] = data.map((bitem:any)=> {
var book = new Book(bitem);
console.log(book) //Shows 'object' not 'Book'
var steps = bitem.steps.map(sitem => (new Step(sitem)));
book.steps = steps;
retrun book;
});
工作样本在这里
推荐阅读
- typescript - 使用条件类型的泛型函数中的返回类型问题
- python - pd.concat的copy=True有什么用?
- python - 如何使用 django rest 框架发送电子邮件
- google-colaboratory - ValueError: 层 model_1 需要 1 个输入,但它接收到 2 个输入张量
- angular8 - Angular 更改 URL 和更改组件
- http - 如何在赛普拉斯请求中访问不同域的 cookie?
- python - 棉花糖不从嵌套列表返回验证错误
- reactjs - 从子组件重新渲染 useEffect
- flutter - 检测任何聚焦的文本字段抖动
- angular - Kubernetes nginx 将流量路由到 /api/*