typescript - ประเภท Union กับอินเตอร์เฟซ, รับรู้เฉพาะคุณสมบัติที่ใช้ร่วมกัน
ฉันต้องการใช้สองอินเตอร์เฟซเหมือนกับใน Union Types ใน TypeScript แต่ตามที่คุณเห็นในตัวอย่างง่ายๆ ด้านล่าง ฉันไม่สามารถตรวจสอบได้ว่าพารามิเตอร์มีประเภทใด และฉันสามารถเข้าถึงเฉพาะคุณสมบัติที่ทั้งสองอินเตอร์เฟซมีร่วมกันเท่านั้น คุณมีข้อเสนอแนะไหมว่าฉันควรทำอย่างไร?
คำตอบ #1
คุณจะต้องใช้สหภาพแบบแยกประเภท
interface Foo {
id: string;
name: string;
type: "Foo";
}
interface Bar {
id: string;
phoneNumber: number;
type: "Bar";
}
function baz(input: Foo | Bar) {
if(input.type === "Bar") {
input.phoneNumber
}
}
สนามเด็กเล่น
คำตอบ #2
input มีชนิด Foo | Bar ซึ่งหมายความว่า ในจุดนี้ สำหรับ TypeScript มันอาจจะเป็นสิ่งใดสิ่งหนึ่งในนั้น แต่ไม่สามารถระบุเพิ่มเติมได้ ดังนั้นมันจึงรู้แค่ id ซึ่งเป็นคุณสมบัติที่ใช้ร่วมกัน คุณควรมีการตรวจสอบชนิด ฉันจะทำอะไรประมาณนี้:
interface Foo{
id:string;
name:string;
type:"Foo"
}
interface Bar{
id:string;
phoneNumber:string;
type:"Bar"
}
function bas(input : Foo| Bar){
if(input.type === "Bar"){
input.phoneNumber
}else{
input.name
}
}
สังเกตว่าฉันกำลังใช้คุณสมบัติ type นี้ ที่นี่มี TypeScript Playground หากคุณต้องการ
