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

Why should I be using interfaces (models) in Typescript / Angular?

在我看来,用模型定义对象似乎使它们变得僵化并且对更改的容忍度降低,这使得将来更容易破坏应用程序并添加代码行而无益。例如,我可以有一个 get 方法,该方法 returns 来自 API 的视频对象并将其编程为 Any 或定义的模型。

/model/video.ts

export interface Video {
// my code
 }

/pages/videos.ts

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

对比

/pages/videos.ts

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

我的看法。更少的代码行、更少的复杂性、更少的文件和更少的刚性是一件好事。为什么还要定义模型?

...making it easier to break an application in the future...

这与使用 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) 时,编译器会警告您不能这样做,因为该函数需要不同类型的参数。

在某些情况下,拥有定义良好的接口更为重要。这取决于您要满足的要求,应用程序的风险等。

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