使用接口强制执行类型

Typescript 的核心优势之一是它可以强制执行你传递代码的值的数据类型,以帮助防止出错。

假设你正在制作宠物约会应用程序。

你有这个简单的功能,检查两只宠物是否相互兼容……

checkCompatible(petOne, petTwo) {
  if (petOne.species === petTwo.species &&
      Math.abs(petOne.age - petTwo.age) <= 5) {
    return true;
  }
}

这是完全功能性的代码,但对于某人,特别是那些没有编写此功能的应用程序的人来说,他们应该不知道他们应该通过物种年龄来传递对象,这太容易了。属性。他们可能会错误地尝试 checkCompatible(petOne.species, petTwo.species) 然后留下来找出函数试图访问 petOne.species.species 或 petOne.species.age 时抛出的错误!

我们可以防止这种情况发生的一种方法是在 pet 参数上指定我们想要的属性:

checkCompatible(petOne: {species: string, age: number}, petTwo: {species: string, age: number}) {
    //...
} 

在这种情况下,Typescript 将确保传递给函数的所有内容都具有种类年龄属性(如果它们具有其他属性,则可以),但这是一个笨拙的解决方案,即使只指定了两个属性。有了接口,有更好的方法!

首先我们定义我们的界面:

interface Pet {
  species: string;
  age: number;
  //We can add more properties if we choose.
}

现在我们所要做的就是将参数的类型指定为我们的新界面,就像这样……

checkCompatible(petOne: Pet, petTwo: Pet) {
  //...
}

…和 Typescript 将确保传递给我们函数的参数包含 Pet 接口中指定的属性!