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;
}
