วิธีการนำเข้าประเภทที่สืบทอดมาของฟังก์ชันที่ส่งออกใน TypeScript
ฉันมีไฟล์สองไฟล์ myFunction.ts และ index.ts.
myFunction.tsส่งออกฟังก์ชันดังนี้:
export default (param1: string) => { return true }
index.tsนำเข้าฟังก์ชันนั้นดังนี้:
import myFunction from './myFunction'
แล้วฉันต้องการใช้ไทป์จาก myFunction อย่างนี้:
function bla(aFn: myFunction) {
aFn('hello')
}
อย่างไรก็ตาม ตัวคอมไพเลอร์แจ้งข้อผิดพลาด ไม่สามารถหาชื่อ myFunction ได้
ฉันจะได้ไทพ์ของฟังก์ชันที่ส่งออกอย่างไร?
เป็นทางเลือกหนึ่ง คุณสามารถสร้างและส่งออกประเภทสำหรับฟังก์ชันได้ดังนี้:
export type MyFunctionType = (param1: string) => boolean
export default (param1: string) => { return true; }
และจากนั้นนำเข้าเหมือนดังนี้:
import myFunction, { MyFunctionType } from './myFunction';
function bla(myFunction: MyFunctionType) {
myFunction('hello')
}
แต่หลังจากนั้นคุณจะกำหนดข้อมูลประเภทสองครั้ง ซึ่งเป็นสิ่งที่ฉันอยากหลีกเลี่ยง...
คำตอบ #1
ลูอี้ถูกในระดับหนึ่ง คุณจำเป็นต้องใช้ typeof เพื่อรับข้อมูลประเภท:
import myFunction from './myFunction'
function bla(myFunction: typeof myFunction) {
myFunction('hello')
}
คำตอบ #2
ฉันคิดว่าคุณกำลังสับสนระหว่างประเภทกับพารามิเตอร์เริ่มต้นหรือบางอย่าง
ชนิดของ a คือ Function a ไม่ใช่ชนิดตัวมันเอง พารามิเตอร์เริ่มต้นสามารถระบุได้ดังนี้:
function bla(aFn = a) {
aFn('hello');
}
หากคุณต้องการให้ aFn มีลายเซ็นคล้ายกับ a แทน คุณจะต้องระบุลายเซ็นนั้นหรือสร้างอินเทอร์เฟซสำหรับมัน
function bla(aFn: (s: string) => boolean) {
aFn('hello');
}
หรือ...
interface a { (s: string): boolean; }
function bla(aFn: a) {
aFn('hello');
}
