ramda.js - Ramda และ Typescript: เพิ่ม typings ที่ขาดหายไป
ฉันใช้ TypeScript และ Ramdajs ในโปรเจกต์ปัจจุบันของฉัน และฉันเพิ่งสังเกตว่ามีบาง typing ที่หายไป เช่น ไม่มี typing สำหรับฟังก์ชัน innerJoin (เวอร์ชัน @types/ramda คือ 0.25.36 ซึ่งฉันเดาว่าล่าสุดในตอนนี้) ฉันได้ลองเพิ่มคำจำกัดความแบบกำหนดเองในไฟล์แยกภายในโปรเจกต์:
declare namespace R {
interface Static {
innerJoin(): any;
}
}
และแม้ว่า:
declare let R: R.Static;
declare namespace R {
interface Static {
innerJoin(): any; /* here should be a specific signature */
}
}
export = R;
export as namespace R;
แต่ไม่สำเร็จ - typescript ทำเครื่องหมาย R.innerJoin(/*...*/) เป็นไม่ทราบ:
คุณสมบัติ 'innerJoin' ไม่มีอยู่ในประเภท 'Static'
มีใครรู้วิธีการใช้งานมันอย่างถูกต้องไหม? ผมหาวิธีแก้ปัญหาแบบชั่วคราวเจอแล้ว: const R_innerJoin=(R as any).innerJoin แต่ผมสงสัยว่าควรจะมีวิธีที่สวยงามกว่านี้โดยใช้ '.d.ts' ...
ป.ล. เวอร์ชันของ Ramda คือ 0.25.0 ถ้าว่าสิ่งนี้สำคัญ
อัปเดต
ฉันกำลังใช้ Ramda ด้วยวิธีนี้:
import * as R from 'ramda';
const myFn = (a, b) => R.innerJoin(// etc
คำตอบ #1
เนื่องจากคุณกําลังนําเข้าเนมสเปซ R จากโมดูล คุณต้องเพิ่มโมดูลเดิม หากคุณประกาศเนมสเปซ R ของคุณเอง คุณจะเห็นเนมสเปซของคุณหรือเนมสเปซที่นําเข้า ไม่ใช่การควบรวมกิจการ ต่อไปนี้ใช้ได้ผลสําหรับฉันหลังจากลองผิดลองถูกเล็กน้อย:
declare module "dummy" {
module "ramda" {
interface Static {
innerJoin(): any;
}
}
}
การประกาศโมดูลภายนอกเป็นสิ่งจำเป็นเพื่อให้การประกาศโมดูลภายในเป็น "การเสริม" แทนที่จะบังโมดูลต้นฉบับ ดังที่กล่าวถึงในกระทู้นี้ เทคนิคนี้น่าเสียดายที่เท่าที่ทราบยังไม่มีเอกสารอธิบายอย่างถูกต้อง
