Not A Duplicate
My question had nothing to do with trying to find the type nor the class name of an object. My question was about "casting" an object to a type -- which stemmed from a misunderstanding of TypeScript and how it worked. It also related to the use of Object spread while casting.
Original Question
I want to use object spread to map data from the server into a class defined on my client. I was trying to get away from having to pass data to a constructor and map each property with a loop as illustrated here. I tried the following:
//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'
I'm curious why the cast to type Book
yields an object
instead? Is there an easy way to accomplish this or do I need to use the constructor method to accomplish this kind of mapping?