像 jest 一样创建一个全局函数
Create a global function like jest does
我正在开发一个将使用 React 的元框架。
我想提供一些无需导入即可直接使用的函数,就像 jest 对函数 it()
、beforeAll()
等所做的一样...
我基本上通过简单地声明类型化变量就成功了:
//myfile.d.ts
declare var someFunction : () => string
然后为其分配一个函数:
//someFile.ts
someFunction = () => "This is working"
然后,在项目的根目录下,我只导入了一次 someFile.ts 以确保定义了 someFunction :
import "./someFile"
是的,我们很好,该函数是全局的,不需要导入,并且输入正确!
那么,问题是什么?
好吧,当我自己声明我的类型时,这项工作就完成了。
但是如果我需要使用库的类型来创建我自己的类型,它就不再起作用了
假设我想让 axios 对象全局可用而无需导入。
这是我在声明文件中所做的
import { Axios } from "axios"
interface MyOwnAxiosType extends Axios {}
declare var myOwnAxios:MyOwnAxiosType
但是一旦在顶部添加导入,myOwnAxios
就再也找不到此文件之外的
如果您知道我可能做错了什么,将不胜感激,谢谢!
在您的文件中使用 import
会使您的声明文件成为一个模块,而不是环境声明上下文。
相反,您将不得不使用这种令人困惑的语法:
import Axios = import("axios").Axios;
interface MyOwnAxiosType extends Axios {}
declare var myOwnAxios:MyOwnAxiosType
import("axios")
导入模块 axios
作为命名空间(仅限类型)
import("axios").Axios
从命名空间
获取类型 Axios
import Axios = import("axios").Axios
给上面的类型起个别名
使用这种导入将解决问题,因为您不再使用静态导入。
如果这不起作用,您可以尝试内联它:
interface MyOwnAxiosType extends import("axios").Axios {}
declare var myOwnAxios:MyOwnAxiosType
解决方法如下:
在 ts 文件中
import * as axios_ from "axios"
declare global {
var myOwnAxioss : typeof axios_.default
}
global.myOwnAxioss = axios_ as any
就是这样,您现在可以在没有任何导入的情况下使用输入来完成此操作。
myOwnAxioss.get()
我正在开发一个将使用 React 的元框架。
我想提供一些无需导入即可直接使用的函数,就像 jest 对函数 it()
、beforeAll()
等所做的一样...
我基本上通过简单地声明类型化变量就成功了:
//myfile.d.ts
declare var someFunction : () => string
然后为其分配一个函数:
//someFile.ts
someFunction = () => "This is working"
然后,在项目的根目录下,我只导入了一次 someFile.ts 以确保定义了 someFunction :
import "./someFile"
是的,我们很好,该函数是全局的,不需要导入,并且输入正确!
那么,问题是什么?
好吧,当我自己声明我的类型时,这项工作就完成了。 但是如果我需要使用库的类型来创建我自己的类型,它就不再起作用了
假设我想让 axios 对象全局可用而无需导入。
这是我在声明文件中所做的
import { Axios } from "axios"
interface MyOwnAxiosType extends Axios {}
declare var myOwnAxios:MyOwnAxiosType
但是一旦在顶部添加导入,myOwnAxios
就再也找不到此文件之外的
如果您知道我可能做错了什么,将不胜感激,谢谢!
在您的文件中使用 import
会使您的声明文件成为一个模块,而不是环境声明上下文。
相反,您将不得不使用这种令人困惑的语法:
import Axios = import("axios").Axios;
interface MyOwnAxiosType extends Axios {}
declare var myOwnAxios:MyOwnAxiosType
import("axios")
导入模块axios
作为命名空间(仅限类型)
获取类型import("axios").Axios
从命名空间Axios
import Axios = import("axios").Axios
给上面的类型起个别名
使用这种导入将解决问题,因为您不再使用静态导入。
如果这不起作用,您可以尝试内联它:
interface MyOwnAxiosType extends import("axios").Axios {}
declare var myOwnAxios:MyOwnAxiosType
解决方法如下: 在 ts 文件中
import * as axios_ from "axios"
declare global {
var myOwnAxioss : typeof axios_.default
}
global.myOwnAxioss = axios_ as any
就是这样,您现在可以在没有任何导入的情况下使用输入来完成此操作。
myOwnAxioss.get()