如何在将函数暴露在全局命名空间(对象)上时保留函数的类型定义?

How to preserve type definitions of a function while exposing it on global namespace (object)?

基本上我不想导入lodash函数是每个文件。我想在一些全局名称空间(例如 L)上公开它们。我不想导入整个 lodash 库,而只想导入几个函数。我正在尝试以下操作,但后来我失去了类型支持。

interface Lod {
  head: Function
}

interface Window {
  L: Lod;
}

import head = require('lodash/head');

window.L = {
  head: head
}

所以现在当我使用 head() 然后 IDE 给我智能感知支持(显示错误,因为没有传递参数但我应该给出一个数组)而且我从打字稿中得到编译错误说我正在通过头部参数不正确(这是正确的)。

但是当我使用 window.L.head() 时,我没有从智能感知中得到任何帮助(没有错误)并且打字稿在编译时也没有给出任何错误(这是错误的,我应该得到错误).

非常感谢您的提前帮助!

当您直接使用 head 时,编译器可以检查其中的定义,这就是智能感知起作用而您收到错误的原因。

但是您对 Lod.head 的定义是 Function,这就是编译器可以接受您传递任何参数的原因。

你应该这样做:

import head = require('lodash/head');

interface Lod {
    head: typeof head
}