Kako prebrisati svojstva tipa u TypeScriptu


Na primjer, imam

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

Ali sada želim stvoriti novi tip linije na bazi Linije, tako da pohranjuje boju kao broj:

type HexColorLine = Point & {
  color: number;
}

Sada očekujem da tip HexColorPoint bude jednak

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

Ali to je jednako

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

Postoji li način da se prepiše, ali ne i proširi tip svojstva nekom kratkom sintaksom? Moram li stvarno definirati potpuno novi tip za ovo?

Odgovor #1

Stvorite pomoćni tip:

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

Upotreba :

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

Odgovor #2

Jednostavno jednokratno rješenje od TypeScripta 3.5 moglo bi biti:

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

Odgovor #3

U TypeScriptu 3.5 ili novijem možete koristiti Omit<Type, Keys>.

Za vrste:

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

Za sučelja:

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

Povezani članci