【TypeScript】初心者必見interfaceとtype(型alias)とは?objectとは?

2024年11月24日TypeScript

kamiです。
TwitterYoutubeもやってます。

interfaceとは?

interfaceとはクラスが実装すべきフィールドやメソッドを定義した型です。
interfaceを実装することで、interfaceの関数名や引数名の型チェックすることができます。

interfaceの定義

interface HogeInterface {
  name: string;
  age: number;
}

以下のように変数名:interfaceを呼び出すときにinterface名で定義することで値を代入できます。

const 変数名:interface名 {
  key:value
  key:value 
}
icon

関数を定義することもできます。

interface HogeInterface {
  method1(): void;
  method2(name: string): void;
}

interfaceの呼び出し方

interface Hoge {
  name: string;
  age: number;
}
 
const test: Hoge = {
  name: "kami",
  age: 35,
};

console.log(test)
// { name: 'kami', age: 35 }

また、letであれば値を代入することができます。

interface Hoge {
  name: string;
  age: number;
}
 
let test: Hoge = {
  name: "kami",
  age: 35,
};
console.log(test)
// { name: 'kami', age: 35 }
console.log(test)
// { name: 'kami', age: 36 }
test.age = 36;
console.log(test.age)
// 36

interfaceを実装する | implements

インターフェースが定義されると、インターフェースをクラスで実装することができます。
クラスがインターフェースで定義されたプロパティとメソッドを含む必要があります。
またクラスが宣言時にimplementsキーワードを使用する必要があります

interface Hoge {
  name: string;
  test(): string;
}

class Foo implements Hoge {
  name: string;

  constructor(name: string) {
      this.name = name;
      }

  test(): string {
      return "test関数はthis.nameを返します " + this.name;
  }
}

let hoge: Hoge = new Foo("kami");
console.log(hoge.name);
// kami
console.log(hoge.test());
// test関数はthis.nameを返します kami

interfaceを継承して実装します。
クラスのインスタンスを生成して、型にinterfaceを指定します。

let hoge: Hoge = new Foo("kami");

interfaceをextendsで拡張する

interface InterfaceA {
    hoge: string
}

interface InterfaceB extends InterfaceA {
    foo(id: number): boolean
}

class ClassB implements InterfaceB {
    hoge: string = 'kami';

    foo(id: number): boolean {
        return x > 0
    }
}

const classB = new ClassB();
console.log(classB.hoge);
// kami
console.log(classB.foo(30));
// true

複数のinterfaceをextendsで拡張する

interface InterfaceA {
    hoge: string
}

interface InterfaceB {
    foo(x: number): boolean
}

class HogeClass implements InterfaceA, InterfaceB {
    hoge: string = 'kami';

    foo(x: number): boolean {
        return x > 0
    }
}

const hogeClass = new HogeClass();
console.log(hogeClass.hoge);
// kami
console.log(hogeClass.foo(35));
// true

スポンサードサーチ

typeとは

typeはTypeScriptの構文で使われています。
型エイリアスと呼ばれます。

型エイリアス :type alias

TypeScriptでは、型に名前をつけることができます。
その名前のついた型を型エイリアスと言います。

型エイリアスを宣言するときは頭にtypeをつけます。

typeの定義

// プリミティブ型
type Str string;
// リテラル型
type Num = 100;
// 配列型
type Arr = number[];
// オブジェクト型
type Obj = { name :string, id: number };
// ユニオン型
type StrOrNull = string | null;
// 関数型
type Functions = (val: string) => boolean;

typeの呼び出し方

type Hoge = (param: string) => string;
const hogehoge: hoge = param => param;

interfaceとほとんど構文は一緒です。

icon

type名の次は「=」を忘れないように、構文の末に「;」を入れてください。

type Hoge = {// = を記述
  name: string;
  age: number;
}; // セミコロンを記述
 
let test: Hoge = {
  name: "kami",
  age: 35,
};
console.log(test)
test.age = 36;
console.log(test.age)
console.log(test)

インターフェースと型エイリアスの違い

interfaceType Alias
用途クラス、メソッド、オブジェクトの構造定義複数の場所で再利用できる型に名前をつける
使うタイミングライブラリ開発アプリ開発
継承extendsで拡張ができる不可
交差型で新しいエイリアスは作れる
上書き定義がマージされる交差型で新しいエイリアスは作れる
同名での宣言
交差型で新しいエイリアスは作れる
使用できる型オブジェクト
メソッド
オブジェクト
メソッド
配列
プリミティブ
タプル
マップ

interfaceは拡張しやすいのでライブラリなどいろんな環境に適応できるような使い方がおすすめです。

Type Aliasは拡張しにくい分、バグが起きる影響もinterfaceより少ないです。

スポンサードサーチ

オブジェクト型

JavaScriptのオブジェクトでは、以下の構文でオブジェクトを定義できましたが、
TypeScriptではできません。
TypeSCriptではオブジェクトに型を定義しないとエラーが出ます。

  const hoge: object = {
    name: 'kami',
    age: 35
  }
  hoge.name

オブジェクト型の定義と再定義

let hoge: {
  name: string
  age: number
} = {
  name: 'kami',
  age: 35,
}

console.log(hoge)
// { name: 'kami', age: 35 }

hoge = {
  name: 'kamiblog',
  age: 40,
}
console.log(hoge)
// { name: 'kamiblog', age: 40 }

オブジェクト型は再定義で代入することもできます。

オブジェクト型でreadonlyを使う

readonlyはそのままで読み取りのみなので、代入で値を変更することことができません。

 const hoge: {
   name: string
   age: number
   readonly gender: string
 } = {
   name: 'kami',
   age: 28,
   gender: 'man',
 }

console.log(hoge)
// { name: 'kami', age: 28, gender: 'man' }
console.log(hoge.gender)
// man
console.log(hoge.gender = 'lady')
// エラー

オブジェクト型でオプショナル型を使う

オプショナル型の場合は値がなくてもエラーになることがありません。

const hoge: {
  name: string
  age: number
  other?: string
} = {
  name: 'kami',
  age: 28,
}

console.log(hoge)
// { name: 'kami', age: 28 }

hoge.other = 'その他'
console.log(hoge)
// { name: 'kami', age: 28, other: 'その他' }

値を代入すれば、取得時に表示がされます。

スポンサードサーチ

実装やエラーが解決できない場合

プログラミングの実装やエラーでどうしてもわからない場合はメンターに相談するのが一番です。

考えている、見えている範囲が狭くなり、解決から遠くに行って何時間も、何日も経っていることなんてよくある話です。

そういう時は聞ける先輩や、メンターに相談することが大事です。

僕にも相談可能なので気軽に相談してください。

Twitterからの連絡だと確実ですよ。

オンラインスクールやプログラミングスクールといったプログラミングを学べる方法もあるので、そちらもぜひ活用してもいいと思います。

Web開発で分からない時

オンライン完結型スクール DMM WEBCAMP PRO

アプリ開発で分からない時

プログラミング×稼げる副業スキルはテックキャンプ

プログラミングについて分からない時

【コエテコ様限定】※ご案内を受けた以外のメディアが使用しても成果は承認されません。
ミニマリスト_カミ

僕への個人でもメンターでも、スクールでもお好きな方を活用ください。

TypeScriptTypeScript

Posted by kami