ประเภทเงื่อนไขของ 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'>();
