如何在将函数暴露在全局命名空间(对象)上时保留函数的类型定义?
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
}
基本上我不想导入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
}