[TypeScript] Interface

An interface is a way of defining an object type. An “object type” can be thought of as, “an instance of a class Could conceivably look like this”.

For example, string | number is not an object type, because it makes use of the union type operator.

 

Inheritance in interfaces

EXTENDS

If you’ve ever seen a JavaScript class that “inherits” behavior from a base class, you’ve seen an example of what TypeScript calls a heritage clauseextends

class Animal {
  eat(food) {
    consumeFood(food)
  }
}
class Dog extends Animal {
  bark() {
    return "woof"
  }
}
 
const d = new Dog()
d.eat
d.bark
  • Just as in in JavaScript, a subclass extends from a base class.
  • Additionally a “sub-interface” extends from a base interface, as shown in the example below

IMPLEMENTS

TypeScript adds a second heritage clause that can be used to state that a given class should produce instances that confirm to a given interfaceimplements.

interface AnimalLike {
  eat(food): void
}
 
class Dog implements AnimalLike {
   // Error: Class 'Dog' incorrectly implements interface 'AnimalLike'.
   // Property 'eat' is missing in type 'Dog' but required in type 'AnimalLike'.
   bark() {
    return "woof"
  }
}

 

Open Interfaces

TypeScript interfaces are “open”, meaning that unlike in type aliases, you can have multiple declarations in the same scope:

You may be asking yourself: where and how is this useful?

Imagine a situation where you want to add a global property to the window object

window.document // an existing property
window.exampleProperty = 42
// tells TS that `exampleProperty` exists
interface Window {
  exampleProperty: number
}

 

What we have done here is augment an existing Window interface that TypeScript has set up for us behind the scene.

 

Choosing which to use

In many situations, either a type alias or an interface would be perfectly fine, however…

  1. If you need to define something other than an object type (e.g., use of the | union type operator), you must use a type alias
  2. If you need to define a type to use with the implements heritage term, it’s best to use an interface
  3. If you need to allow consumers of your types to augment them, you must use an interface.

相关文章

我最大的一个关于TypeScript的问题是,它将原型的所有方法(无...
我对React很新,我正在尝试理解子组件之间相互通信的简洁方法...
我有一个非常简单的表单,我将用户电子邮件存储在组件的状态,...
我发现接口非常有用,但由于内存问题我需要开始优化我的应用程...
我得到了一个json响应并将其存储在mongodb中,但是我不需要的...
我试图使用loadsh从以下数组中获取唯一类别,[{"listing...