TypeScript

时间:2016-03-11 06:58:32

标签: typescript angular

我的angular2应用程序中有一些接口。其中一个是我从远程API获取的产品。

我的界面:

export interface Product {
    id: number;
    name: string;
}

在我的服务中提取产品时,我会这样做:

this.http.get(productsUrl).map(res => <Product>res.json());

然后这是在我的应用程序中的某处订阅。我刚才意识到,后端的产品比id和name有更多的属性,这是在我的界面中定义的。我教过这会引起某种错误,但似乎我的界面只是被从后端获取的内容所覆盖。

我可以通过在我的应用程序中稍后执行product.price获得价格,即使这不是我的界面的一部分(但是在获取的json中的产品的一部分)。为什么会这样?如果它被覆盖的界面是什么?

2 个答案:

答案 0 :(得分:2)

TypeScript中的接口用于IDE中的静态类型检查和自动完成支持,但它们在运行时被删除。像在JS中一样,您可以动态添加和删除属性。

如果要将JSON强制转换为类,该类也只包含从JSON获取的内容,但不包含类似方法的实现。

另见How do I cast a JSON object to a typescript class

答案 1 :(得分:2)

TypeScript中的界面&#34; ...is a powerful way of defining contracts...&#34;。它只是一个契约,声明 - 期望在一个对象中实现什么属性。然后你施放&#34;任何&#34;对象是一个接口,你不要修改这个对象,你只要告诉转换器,你期望它存在某些属性。