วิธีการประกาศ session type ของเราให้โมดูล express-session ในโปรเจค NodeJs(TypeScript)

by | Last updated Jan 31, 2021 | node.js | 0 comments

บรรดานักพัฒนาซอฟต์แวร์ที่ลงหลักปักฐานกับภาษา JavaScript แล้วกำลังเปลี่ยนมาใช้ TypeScript คงกำลังจะเจอปัญหาเกี่ยวกับ type ทำให้เขียนโค้ดติดขัดไม่มากก็น้อย

การใช้ไลบรารี่ express-session ในโปรเจค Node.js ก็เจอปัญหา type เช่นกัน เมื่อเราจะเข้าถึงตัวแปรเซสชันของเรา eslint จะขึ้นเตือนข้อผิดพลาดตลอดทำให้รู้สึกไม่สะดวกเวลาเข้าถึงข้อมูลที่จำเป็นต้องใช้บ่อยๆ

ตัวอย่างข้อความ error ที่แสดงเมื่อเราพยายามเข้าถึงตัวแปรเซสชัน

Property ‘user’ does not exist on type ‘Session & Partial<SessionData>’

ผมได้ลองค้นหาปัญหาดังกล่าวเพื่อที่จะหาสาเหตุ ซึ่งก็ยอมรับว่าปัญหานี้ค้นหาข้อมูลหลายครั้งก่อนที่ได้พบวิธี เพราะว่า express-session เกี่ยวข้องกับไลบรารี่ express.js ซึ่งสองอย่างนี้มีสิ่งที่เชื่อมโยงกันอยู่ วันนี้เลยขอนำแนวทางแก้ไขเบื้องต้นสำหรับใครที่ยังแก้ไม่ได้ ส่วนรายละเอียดอะไรที่ลึกซึ้งมากกว่านี้ผมจะวางลิงค์ไว้ด้านล่างบทความครับ

วิธีการมี 2 ขั้นตอน

1.สร้างโฟลเดอร์ types และในโฟลเดอร์นี้ให้สร้างโฟลเดอร์ express-session ซึ่งเป็นชื่อเดียวกับไลบรารี่ และในโฟลเดอร์นี้ให้เราสร้างไฟล์ index.d.ts แล้ววางโค้ดต่อไปนี้ลงไปแล้วให้เราแก้ไขค่าบรรทัดที่ 5 หรือสามารถเพิ่มเติมตามที่เราจะกำหนด

2. อัพเดทไฟล์ tsconfig.json ดังต่อไปนี้ และให้เราสังเกตโค้ดบรรทัดที่ 53 จะเป็นการ import ข้อมูล types definition ที่เราเขียนไว้ข้อ 1.

Refferals

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/express-session/index.d.ts#L23 https://www.typescriptlang.org/docs/handbook/declaration-merging.html

บทความที่เกี่ยวข้อง

No Results Found

The page you requested could not be found. Try refining your search, or use the navigation above to locate the post.