สมมติว่าฉันมีประเภทต่อไปนี้:
type Event = {
name: string;
dateCreated: string;
type: string;
}
ตอนนี้ฉันต้องการขยายประเภทนี้เช่น
type UserEvent extends Event = {
UserId: string;
}
วิธีนี้ใช้ไม่ได้ ฉันจะทำเช่นนี้ได้อย่างไร?
สมมติว่าฉันมีประเภทต่อไปนี้:
type Event = {
name: string;
dateCreated: string;
type: string;
}
ตอนนี้ฉันต้องการขยายประเภทนี้เช่น
type UserEvent extends Event = {
UserId: string;
}
วิธีนี้ใช้ไม่ได้ ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
คีย์เวิร์ดextendsสามารถใช้สำหรับอินเทอร์เฟซและคลาสเท่านั้น
หากคุณต้องการประกาศประเภทที่มีคุณสมบัติเพิ่มเติมคุณสามารถใช้ประเภทจุดตัด :
type UserEvent = Event & {UserId: string}
อัปเดตสำหรับ TypeScript 2.2 ตอนนี้เป็นไปได้ที่จะมีอินเทอร์เฟซที่ขยายประเภทวัตถุเหมือนหากประเภทตรงตามข้อ จำกัด บางประการ:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
มันไม่ได้ผลในทางอื่น - UserEventต้องประกาศเป็นอินเทอร์เฟซไม่ใช่typeถ้าคุณต้องการใช้extendsไวยากรณ์
และยังคงเป็นไปไม่ได้ที่จะใช้extend กับประเภทที่กำหนดเองตัวอย่างเช่นไม่สามารถใช้งานได้หากEventเป็นพารามิเตอร์ type โดยไม่มีข้อ จำกัด ใด ๆ
interface A<T> extends B<T> {blar}อินเทอร์เฟซสามารถขยายประเภทออบเจ็กต์หรือจุดตัดของประเภทออบเจ็กต์ได้เฉพาะกับสมาชิกที่รู้จักแบบคงที่
interface Identifiable<T> extends T { id: string }ทำให้ฉันมีข้อผิดพลาด "อินเทอร์เฟซสามารถขยายประเภทอ็อบเจ็กต์หรือจุดตัดของประเภทอ็อบเจ็กต์ได้เฉพาะกับ
คุณสามารถตัดกันประเภท:
type TypeA = {
nameA: string;
};
type TypeB = {
nameB: string;
};
export type TypeC = TypeA & TypeB;
ตอนนี้คุณสามารถทำโค้ดที่ไหนสักแห่ง:
const some: TypeC = {
nameB: 'B',
nameA: 'A',
};
TextInputPropsองค์ประกอบการป้อนข้อความที่กำหนดเองได้อย่างง่ายดาย ขอบคุณ!
สิ่งที่คุณพยายามจะบรรลุนั้นเทียบเท่ากับ
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
วิธีที่คุณกำหนดชนิดไม่อนุญาตให้มีการระบุมรดก, แต่คุณสามารถบรรลุสิ่งที่คล้ายกันโดยใช้ประเภทแยกเป็นArtemชี้ให้เห็น
interfaceเมื่อฉันหมายถึงtype
อาจเป็นแนวทางด้านล่างจะเป็นประโยชน์สำหรับคนที่ TS ด้วย reactjs
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent<T> extends Event<T> {
UserId: string;
}
typeคำหลักที่จะใช้ในการกำหนดชื่อแทนประเภทไม่อินเตอร์เฟซหรือชั้นเรียน