Make it to make it

いろいろ作ってアウトプットするブログ

TypeScript学習4(Typed objects: Interfaces)

Interfaces

Creates a new type, describing the property names and value types of an object

例えば、今まで学んだことを利用して次のように型定義を行うと、コードが長くなってしまって可読性も低くなる。

const oldCivic = {
  name: 'civic',
  year: 200,
  broken: true
};

const printVehicle = (vehicle: {
  name: string;
  year: number;
  broken: boolean;
}): void => {
  console.log(`Name: ${vehicle.name}`);
  console.log(`Year: ${vehicle.year}`);
  console.log(`Broken? ${vehicle.broken}`);
};

そこで、Interfaceを用いて別箇所での型定義を行う。

const oldCivic = {
  name: 'civic',
  year: 200,
  broken: true
};

interface Vehicle {
  name: string;
  year: number;
  broken: boolean;
}

const printVehicle = (vehicle: Vehicle): void => {
  console.log(`Name: ${vehicle.name}`);
  console.log(`Year: ${vehicle.year}`);
  console.log(`Broken? ${vehicle.broken}`);
};

プリミティブだけでなく、どんな型でもInterfacesに入れることができる。

const oldCivic = {
  name: 'civic',
  year: new Date(),
  broken: true,
  summary(): string {
    return `Name: ${this.name}`;
  }
};

interface Vehicle {
  name: string;
  year: Date;
  broken: boolean;
  summary(): string;
}

const printVehicle = (vehicle: Vehicle): void => {
  console.log(vehicle.summary());
};

printVehicle(oldCivic);

Interfaceとは、ファンクションに引数を渡す際のゲートキーパである。