คุณใช้ Twix (momentjs) กับ Typescript อย่างไร
มีใครเคยใช้ Twix กับ TypeScript แล้วสามารถแชร์วิธีที่ทำให้มันใช้งานได้บ้างไหม?
ฉันมี:
import * as moment from 'moment';
import * as twix from 'twix';
Moment ทำงานได้ดี อินเทลลิเซนส์และทุกอย่าง โมดูล Twix นำเข้าได้ดี และถ้าฉันพิมพ์ twix. ฉันสามารถเห็นอินเทอร์เฟซปรากฏขึ้น
แต่ฉันได้รับ:
คุณสมบัติ twix ไม่มีอยู่ใน Moment
เมื่อฉันพยายามใช้ moment(date).twix()
แก้ไข: ฉันได้ลองใช้ let twix=require('twix'); และ import twix=require('twix'); แล้วแต่ก็ไม่สำเร็จ
แก้ไข 2 ฉันรัน npm install moment และ npm install twix และ npm install @types/twix.
ฉันรู้ว่า moment ถูกติดตั้งและทำงานอย่างถูกต้อง ไฟล์ typings ที่ถูกใช้สำหรับ moment คือไฟล์ moment.d.ts ซึ่งรวมอยู่ในแพ็กเกจ npm ของ moment โดยตรง
ไฟล์ typings ที่ใช้สำหรับ twix อยู่ในแพ็กเกจ npm @types/twix
หลังจากที่ฉันทำการนำเข้า ถ้าฉันพิมพ์ let t=twix. จะมี intellisense ปรากฏขึ้นพร้อมกับ Twix, TwixFormatOptions, TwixIter, TwixParseAndFormatOptions ฯลฯ ดังนั้นฉันคิดว่า typescript กำลังรู้จักกับการพิมพ์ของ twix
การแก้ไขสุดท้าย
ปัญหาใน GitHub นี้อธิบายเหตุผลพื้นฐานที่ทำให้ประเภทของแพ็กเกจที่ขยาย momentjs เสีย และอ้างอิงคำร้องขอดึงที่จะแก้ไขมันอย่างถาวรเมื่อมันถูกรวมเข้าด้วยกัน
คำตอบ #1
ลองแทนที่:
import * as twix from 'twix';
ด้วย :
let twix = require('twix');
จากที่ฉันเข้าใจ Twix ถูกเขียนเป็นโมดูล CommonJS ไม่ใช่โมดูล ES6 ดังนั้นจึงมีวิธีการนำเข้าแตกต่างกัน
ข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับความแตกต่างที่นี่
แก้ไข: ดูเหมือนว่าจะมีบางอย่างผิดพลาดกับการพิมพ์ twix เวอร์ชัน 2.0 วิธีแก้ปัญหาคือคัดลอกการพิมพ์ twix ก่อนเวอร์ชัน 2.0 จาก GitHub และเพิ่มลงในโปรเจกต์ของคุณ
คำตอบ #2
คุณสมบัติ twix ไม่มีอยู่ใน Moment
คุณจะต้องสร้างคำนิยามชนิดสำหรับ twix ซึ่งปัจจุบันยังไม่มีอยู่
แพตช์ด่วน
คุณสามารถระบุ any และมันก็จะเหมือนกับว่าคุณกำลังเขียนจาวาสคริปต์ที่ไม่ถูกตรวจสอบ:
(moment(date) as any).twix()
เพิ่มเติมเกี่ยวกับการยืนยันตัวตน: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
การแก้ไขที่เหมาะสม
คุณจำเป็นต้องสร้างคำนิยามที่ เสริม คำนิยามของ momentjs นี่เป็นงานที่ต้องทำพอสมควรและแนะนำให้ศึกษาข้อกำหนดของ typescript
