TypeScript: Jenis gabungan opsional

Sep 12 2020

Saya memiliki tipe adan tipe b, tetapi ini harus bekerja dengan tipe berapa pun.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

Saya ingin membuat tipe yang secara opsional menggabungkan semua tipe itu, jadi jika itu akan memiliki secondbidang, itu harus memiliki thirdbidang juga, tetapi tidak harus memiliki keduanya:

Baik:

const aa = {
     first: 1,
     second: "hi",
     third: "hello"
}

const ab = {
     first: 1
}

const ac = {
     second: "hi",
     third: "hello"
}

Buruk:

const bb = {
     first: 1,
     second: "hi"
}

Bagaimana saya bisa mendefinisikan tipe seperti itu?

Jawaban

6 Lesiak Sep 12 2020 at 05:15
type None<T> = {[K in keyof T]?: never}
type EitherOrBoth<T1, T2> = T1 & None<T2> | T2 & None<T1> | T1 & T2

type abcombined = EitherOrBoth<a,b>

Lihat contoh yang lebih dielaborasi di: Can Typecript Interfaces mengungkapkan kendala kemunculan bersama untuk properti

Tautan taman bermain

KaranKumar Sep 12 2020 at 05:01

Saya tidak yakin apakah Anda bisa melakukan itu. Inilah yang akan saya lakukan:

Anda bisa menggunakan "|" operator saat mendefinisikan variabel.

type a = {
    first: number
}

type b = {
    second: string
    third: string
}

const test: a | b ={ first: 3, second: 'string'}