我为什么要在Typescript / Angular中使用接口(模型)?

时间:2018-06-11 13:31:21

标签: angular typescript angular5 angular6

我看到它的方式,用模型定义对象似乎使它们变得僵硬并且变化容忍度更小,从而使得将来更容易破坏应用程序并添加代码行而无法获得。例如,我可以使用get方法从API返回视频对象,并将其编程为Any或定义模型。

/model/video.ts

export interface Video {
// my code
 }

/pages/videos.ts

getAllVideos(): Promise<Video> {
// my code
}

VS

/pages/videos.ts

getAllVideos(): Promise<Any> {
// my code
}

我看待它的方式。更少的代码行,更少的复杂性,更少的文件和更少的刚性是一件好事。为什么要定义模型?

2 个答案:

答案 0 :(得分:7)

  

...让以后更容易破解应用程序......

这与使用Typescript向JS引入接口时的情况正好相反。

假设您有一个接受具有特定形状的对象的函数,如此

function giveMeStuff(obj) {
  return obj.foo.toLowerCase();
}

在这种情况下,我们无法确保在调用giveMeStuff时我们实际传递的是一个具有foo属性的对象,该对象也需要是一个字符串。

如果新开发人员(或者您自己,几周后)出现并调用giveMeStuff(12),代码将在运行时中断。

相反,当你有一个界面时会发生这种情况。

function giveMeStuff(obj: IObjectWithFoo): string {
  return obj.foo.toLowerCase();
}

interface IObjectWithFoo {
  foo: string;
}

现在,当您尝试调用giveMeStuff(12)时,编译器会警告您不能这样做,因为该函数期望有不同类型的参数。

答案 1 :(得分:1)

在某些情况下,更重要的是具有明确定义的界面。这取决于您正在履行的要求,应用程序的风险等等。

例如,在特定项目中,强制将该方法与该对象类型一起使用可能更为重要,从而减少了错误概率。