conditional types (แบบมีเงื่อนไข)
อธิบาย keyword สำคัญๆ
extendsเราสามารถคิดได้ว่าเป็นเงื่อนไขใน javacsript ก็ได้ คล้ายๆ กับการใช้===เปรียบเทียบค่าtypeคิดว่าเหมือนเป็น function แต่เป็นสำหรับ type มันคือการใส่ input (ซึ่งก็คือ type เราเรียกว่า generics) แล้วก็มี output โดยที่ output ก็ขึ้นอยู่กับ "เงื่อนไข" ของ type นั้นๆextendsก็เหมือนกับ block ของ logic เหมือนกับ ifinferเปรียบเหมือนแว่นขยายใน TypeScript, ทำหน้าที่ในการ extract type ออกมาจาก type อื่นๆ
การ Extract property type ออกจาก object
type ObjectInfer<T> =
// ถ้า Object T มี property ที่ชื่อ name อยู่
T extends {name: infer A}
// ถ้ามี ให้ return type A (type ของ property name)
? A
// ถ้าไม่มี ใ้ห return never
: never;
const member = { name: 'John' };
type nameType1 = ObjectInfer<typeof member>; // จะได้ type เป็น string
type nameType2 = ObjectInfer<string>; // จะได้ type เป็น never
อ่านเพิ่มเด้อ
- Learn Advanced TypeScript Types (3.7k claps)