angular2 map 数据作为特定对象类型

标签 angular typescript rxjs

我根据 Angular2 教程创建了一个非常简单的应用程序。

首先,我有一个非常简单的“书籍”模型:

 /**
 * book model
 */
export class Book {
    public data;

    /**
     * constructor
     * @param id
     * @param title
     * @param pages
     */
    constructor(
        public id,
        public title:string,
        public pages:Array
    ){
        alert('it works'); // just a check
    }
}

在我的服务中,我得到这样一本书:

return this._http.get('getBook/1')
        .map(function(res){
            return <Book> res.json();
        })

我的期望是这将获得生成的 JSON 数据并将其“映射”到 Book 对象。

但是,它只返回一个类型为“Object”的对象。

我可以自己创建一个新的 Book 对象并在构造函数中传递参数,如下所示:

return new Book(res.id, res.title, res.pages);

这是最好的方法吗?我错过了什么吗?

最佳答案

是的,在 TypeScript 中将对象转换为类型不会创建该类型的实例。它只是 TypeScript 的一个类型检查工具。

如果你实际上想要一个 Book 的实例,你需要使用类似的东西:

return this._http.get('getBook/1')
    .map(function(res){
        var data = res.json();
        return new Book(data.id, data.title, data.pages);
    })

回答您的问题。事实上,如果您的类型中只有字段(例如带有接口(interface)),则转换就足够了。此外,如果您有稍后要使用的方法,则有必要隐式创建 Book 类型的实例(见上文)而不是强制转换。否则您将无法使用它们(它们将在您的对象上未定义)...

有关详细信息,请参阅此问题:

关于angular2 map 数据作为特定对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911348/

相关文章:

javascript - 从结构指令向父组件发射事件不起作用

javascript - rxjs - 具有下一个和错误回调的运算符?

javascript - RxJS:识别组合流中的流源的正确模式?

Angular 4 - 服务中的 rxjs BehaviorSubject 使用

node.js - 在 ID 为 String 的 Angular 4 中使用路由参数

angular - typescript :找不到名称 'Proxy'

json - Angular 5 - 实现数据服务以从 MongoDB 读取 JSON

typescript - 类型可分配给 'Type' 类型的约束,但 'Type' 可以用约束 'Type' 的不同子类型实例化

javascript - useMemo 与 useEffect + useState

angular - 有没有办法知道 rxjs websocket 是否打开