ฉันทำงานเกี่ยวกับการอัพเกรดรหัส typescript setTimeout
บางเก่าที่จะใช้รุ่นคอมไพเลอร์ล่าสุดและฉันมีปัญหากับการเรียกร้องให้ รหัสคาดว่าจะเรียกใช้setTimeout
ฟังก์ชันของเบราว์เซอร์ซึ่งส่งคืนตัวเลข:
setTimeout(handler: (...args: any[]) => void, timeout: number): number;
อย่างไรก็ตามคอมไพลเลอร์กำลังแก้ไขสิ่งนี้กับการนำโหนดไปใช้แทนซึ่งจะส่งคืน NodeJS.Timer:
setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
รหัสนี้ไม่ทำงานในโหนด แต่การพิมพ์ของโหนดจะถูกดึงเข้ามาเป็นการอ้างอิงกับสิ่งอื่น (ไม่แน่ใจว่าอะไร)
ฉันจะสั่งให้คอมไพเลอร์เลือกเวอร์ชันsetTimeout
ที่ฉันต้องการได้อย่างไร
นี่คือรหัสที่เป็นปัญหา:
let n: number;
n = setTimeout(function () { /* snip */ }, 500);
สิ่งนี้ก่อให้เกิดข้อผิดพลาดของคอมไพเลอร์:
TS2322: ประเภท 'Timer' ไม่สามารถกำหนดให้พิมพ์ 'number' ได้