ค้นหาเว็บไซต์

ประเภทเงื่อนไขของ Typescript ในสตริงรวม


ฉันต้องการพิมพ์ฟังก์ชันที่รับสตริงเป็นอินพุตและส่งคืนเป็นรายการถ้าสตริงมี '[]' และส่งคืนเป็นอ็อบเจกต์ในกรณีอื่น ๆ อะไรประมาณนั้น:

function func<T = any>(query: string): typeof query extends `${any}[]${any}` ? Array<T> : T {
  if (query.includes('[]')) {
    return [] as T[]
  }
  return {} as T
}

นอกจากมันจะไม่ทำงาน ประเภทค่าที่ฟังก์ชันส่งคืนมีเพียงสตริงเท่านั้น

ฉันกำลังใช้เวอร์ชัน TypeScript ล่าสุด (4.3.2)

คุณช่วยฉันเรื่องนั้นได้ไหม?

คำตอบ #1

คุณสามารถทำสิ่งนั้นได้เฉพาะกับพารามิเตอร์ชนิดเท่านั้น ไม่ใช่พารามิเตอร์ฟังก์ชันจริง

function func<S extends string, T = any>(): S extends `${infer A}[]${infer B}` ? Array<T> : T {

}
const testFun = func<'a[]b'>();
const testFun2 = func<'ab'>();

บทความที่เกี่ยวข้อง