- GitHub - gvergnaud/hotscript: A library of composable functions for the type-level! Transform your TypeScript types in any way you want using functions you already know.
- A library of composable functions for the type-level! Transform your TypeScript types in any way you want using functions you already know. - gvergnaud/hotscript
โพสต์นี้แปลโดย AI
บทสรุปของโพสต์โดย durumis AI
- การพิมพ์ Type ด้วยตัวเองใน TypeScript อาจทำให้ยากต่อการอ่าน และการใช้ High-order Type จะช่วยให้สามารถนิยามได้อย่างเรียบร้อยกว่า
- ไลบรารี hotscript ช่วยให้สามารถจัดการนิยาม Type ได้อย่างกระชับโดยอาศัย High-order Type
- ขอแนะนำให้ใช้ไลบรารี hotscript ที่มีฟังก์ชันการทำงานที่หลากหลายเพื่อเพิ่มความสามารถในการอ่านโค้ดและใช้ตามความจำเป็น
ลองนำโค้ดตัวอย่างมาดูกันครับ
เป็นโค้ดที่แปลงอักษรตัวแรกของแต่ละคำเป็นอักษรตัวใหญ่
const firstLetterUpperCase = (str : string) => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" "); } console.log(firstLetterUpperCase("hello world"));
ง่ายๆ แต่ถ้าเป็นแบบนี้ return type จะกลายเป็น string และไม่สามารถอนุมานชนิดข้อมูลได้
type FirstLetterUppercase = T extends ${infer R}${infer RestWord} ${infer RestSentence} ? ${Uppercase<R>}${RestWord} ${FirstLetterUppercase<RestSentence>} : T extends ${infer R}${infer RestWord} ? ${Uppercase<R>}${RestWord} : never; const firstLetterUpperCase= (str : T) : FirstLetterUppercase => { return str.split(" ").map(v => ${v.charAt(0).toUpperCase()}${v.slice(1)}).join(" ") as FirstLetterUppercase ; } console.log(firstLetterUpperCase("hello world"));
แน่นอนว่าเราสามารถกำหนดชนิดข้อมูลทีละตัวแบบนี้ได้
แต่ชนิดข้อมูลแบบนี้ดูไม่ค่อยน่าอ่านเท่าไหร่ การซ้อน operator สามเหลี่ยมและโครงสร้างแบบ recursive ก็น่าจะเป็นปัญหาหนึ่ง
แต่ที่น่าทึ่งก็คือ TypeScript รองรับ Higher-order type
และมีไลบรารี Higher-order type ที่สร้างขึ้นจาก Higher-order type นี้อยู่หนึ่งตัว
สามารถใช้ไลบรารีนี้เพื่อจัดระเบียบคำจำกัดความของชนิดข้อมูลได้อย่างเรียบร้อย
type FirstLetterUppercase2= Pipe< T, [ Strings.Split<" ">, Tuples.Map<Strings.Capitalize>, Tuples.Join<" "> ] >; type A = FirstLetterUppercase2<"hello world">; // ^? type = "Hello World"
โค้ดอยู่ที่นี่ครับ
ด้วย Higher-order type เหล่านี้ ทำให้เราสามารถจัดระเบียบชนิดข้อมูลได้อย่างน่าอ่าน
นอกจากนี้ยังมีฟังก์ชันอื่นๆ อีกมากมาย ลองเข้าไปดูในเว็บไซต์ แล้วใช้เมื่อจำเป็นนะครับ