Cara menimpa properti tipe di TypeScript


Misalnya, saya memiliki

type Line = {
  start: Point;
  end: Point;
  color: string; //'cyan'/'aquablue'/...
}

Tapi sekarang saya ingin membuat tipe baris baru berdasarkan Line, sehingga menyimpan warna sebagai angka:

type HexColorLine = Point & {
  color: number;
}

Sekarang saya berharap tipe HexColorPoint sama dengan

{
  start: Point;
  end: Point;
  color: number;
}

Tapi itu sama dengan

{
  start: Point;
  end: Point;
  color: string | number;
}

Apakah ada cara untuk mengubah tetapi tidak memperluas tipe prop dengan beberapa sintaks pendek? Apakah saya benar-benar harus mendefinisikan tipe baru sepenuhnya untuk ini?

Jawaban #1

Buat tipe pembantu:

type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U;

Penggunaan :

type HexColorLine = Overwrite<Line, { color: number }>

Jawaban #2

Solusi sekali pakai yang sederhana sejak TypeScript 3.5 bisa berupa:

type HexColorLine = Omit<Line, 'color'> & {
  color: number;
}

Jawaban #3

Dalam TypeScript 3.5 atau yang lebih baru, Anda dapat menggunakan Omit<Type, Keys>.

Untuk tipe:

type HexColorPoint = Omit<Line, "color"> & {
    color: number;
}

Untuk antarmuka:

interface HexColorPoint extends Omit<Line, "color"> {
    color: number;
}

Artikel terkait