Tìm kiếm trang web

Cách nhập kiểu dẫn xuất của một hàm được xuất trong TypeScript


Tôi có hai tệp myFunction.ts và index.ts.

  • myFunction.ts xuất khẩu một hàm như sau:
export default (param1: string) => { return true }
  • index.ts nhập hàm đó như sau:
import myFunction from './myFunction'

và sau đó tôi muốn sử dụng kiểu định nghĩa từ myFunction như sau:

function bla(aFn: myFunction) {
  aFn('hello')
}

Tuy nhiên, trình biên dịch cho tôi không thể tìm thấy tên myFunction.

Làm thế nào để tôi có được các kiểu cho hàm đã xuất?

Như một giải pháp tạm thời, bạn có thể tạo và xuất một kiểu cho hàm như sau:

export type MyFunctionType = (param1: string) => boolean
export default (param1: string) => { return true; }

Và sau đó nhập như sau:

import myFunction, { MyFunctionType } from './myFunction';

function bla(myFunction: MyFunctionType) {
  myFunction('hello')
}

nhưng sau đó bạn sẽ phải chỉ định thông tin kiểu hai lần, điều mà tôi muốn tránh...

Câu trả lời #1

Louy phần nào đã đúng. Bạn cần sử dụng typeof để lấy thông tin kiểu:

import myFunction from './myFunction'

function bla(myFunction: typeof myFunction) {
  myFunction('hello')
}

Câu trả lời #2

Tôi nghĩ bạn đang trộn lẫn các loại và các tham số mặc định hay gì đó.

Kiểu của a là Function. a không phải là một kiểu riêng. Tham số mặc định có thể được chỉ định như sau:

function bla(aFn = a) {
  aFn('hello');
}

Nếu bạn thay vào đó cần aFn có chữ ký giống với a, bạn sẽ phải chỉ định chữ ký đó hoặc tạo một giao diện cho nó.

function bla(aFn: (s: string) => boolean) {
  aFn('hello');
}

Hoặc...

interface a { (s: string): boolean; }
function bla(aFn: a) {
  aFn('hello');
}