我的angular2应用程序中有一些接口。其中一个是我从远程API获取的产品。
我的界面:
export interface Product {
id: number;
name: string;
}
在我的服务中提取产品时,我会这样做:
this.http.get(productsUrl).map(res => <Product>res.json());
然后这是在我的应用程序中的某处订阅。我刚才意识到,后端的产品比id和name有更多的属性,这是在我的界面中定义的。我教过这会引起某种错误,但似乎我的界面只是被从后端获取的内容所覆盖。
我可以通过在我的应用程序中稍后执行product.price获得价格,即使这不是我的界面的一部分(但是在获取的json中的产品的一部分)。为什么会这样?如果它被覆盖的界面是什么?
答案 0 :(得分:2)
TypeScript中的接口用于IDE中的静态类型检查和自动完成支持,但它们在运行时被删除。像在JS中一样,您可以动态添加和删除属性。
如果要将JSON强制转换为类,该类也只包含从JSON获取的内容,但不包含类似方法的实现。
答案 1 :(得分:2)
TypeScript中的界面&#34; ...is a powerful way of defining contracts...&#34;。它只是一个契约,声明 - 期望在一个对象中实现什么属性。然后你施放&#34;任何&#34;对象是一个接口,你不要修改这个对象,你只要告诉转换器,你期望它存在某些属性。