Tipe Typescript mempersempit nilai kembalian fungsi berdasarkan parameter


Halo orang-orang pintar di Stack Overflow!

Apakah ada yang tahu bagaimana cara membuat fungsi berikut ini bekerja? Saat ini output tidak dipersempit tipenya berdasarkan input brand.

Tujuannya adalah agar nilai balik dari carFactory mengembalikan objek bertipe berdasarkan input brand.

type ToyotaCar = {
  brand: 'toyota'
  isCool: true
}

type LamboCar = {
  brand: 'lambo'
  isAwesome: false
}

type FordCar = {
  brand: 'ford'
  isFast: false
}

type Car = ToyotaCar | LamboCar | FordCar

type CarFactoryOptions = Partial<Car> & Pick<Car, 'brand'>

const mockToyota: ToyotaCar = { brand: 'toyota', isCool: true }
const mockLambo: LamboCar = { brand: 'lambo', isAwesome: false }
const mockFord: FordCar = { brand: 'ford', isFast: false }

const carFactory = (options: CarFactoryOptions) => {
  const { brand, ...overrides } = options
  switch (brand) {
    case 'toyota':
      return { ...mockToyota, ...overrides }

    case 'ford':
      return { ...mockFord, ...overrides }

    case 'lambo':
      return { ...mockLambo, ...overrides }

    default:
      throw new Error('')
  }
}

const ford = carFactory({ brand: 'ford' })
ford.isFast

Saya mencoba menetapkan tipe pengembalian secara eksplisit dengan beberapa cara berbeda seperti

const carFactory = (options: CarFactoryOptions): Car & {typeof options['brand']} => {