ค้นหาเว็บไซต์

วิธีการนำเข้าประเภทที่สืบทอดมาของฟังก์ชันที่ส่งออกใน 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');
}