LoginSignup
0
0

More than 1 year has passed since last update.

ジェネリクスを伴うインターフェイスを具象クラスでimplemetsする際に型制約に幅を持たせる方法

Posted at

何をしたかった?

ジェネリクスを伴うインターフェイスを具象クラスでimplemetsする際に、「型の制約に幅をもたせたい!」というケースに遭遇しました。
しかし、「ジェネリクス インターフェイス Typescript」のように検索しても、implememtsする際に型を唯一に制約するような例しか出てきませんでした。

例えば以下のようなものです。
ジェネリクスの入門記事でよく見かけるような内容かと思います。

interface IHoge<T extends number | string | boolean> {
  hoge(item: T): T;
}

class Hoge implements IHoge<number> {
  hoge(item: number): number {
    return item;
  }
}

自分が実現したいのは「numberstring を取り扱える具象クラスを実装したい!」というものでしたが、上例のように実装してしまうと、クラスHogenumber型しか取り扱えなくなります。

どうやって解決した?

以下のように、インターフェイスIHogeT を渡し、具象クラスHoge において T extends ○ | △ で制約をかけることで実現できました。

interface IHoge<T extends number | string | boolean> {
  hoge(item: T): T;
}

class Hoge<T extends number | string> implements IHoge<T> {
  hoge(item: T): T {
    return item;
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0