将 Typescript 全局变量声明为 "module" 类型
Declare Typescript global variable as "module" type
我有 React 类型定义文件(使用外部模块声明)。在我的源文件中,我通常这样做:
import * as R from "react"
然后可以愉快地以强类型方式使用 R.createElement(...
等。
我想要的是不必在每个文件中导入 R
,而是将其作为全局声明(是的,我愿意用一些变量污染全局命名空间)。我试过:
import * as React from "react";
declare var R : React;
虽然这不起作用,但我得到 "Cannot find name 'React'"
。还有另一种方法可以将整个模块导出为全局模块吗?
编辑 1 -
我应该说得更清楚:我对如何在 .d.ts
文件中导出全局 类型定义 很感兴趣。因此,假设我已经将 R
附加到 window
。现在我需要打字稿来知道 R
是 React module
.
类型
declare
关键字没有在全局范围内声明变量。此关键字用于在全局范围内存在变量并且您想在 TypeScript 中使用它而不会出现编译错误的情况。
您可以声明一个全局变量:
import * as R from "react";
window.R = R;
instead have it as a global
这有两个方面:global type declaration
用于打字稿,global variable availability
用于 JavaScript 消费。
全局类型声明
A .d.ts
或声明仅有助于 global 名称声明 space 如果没有根级别 import 或 export 在文件中。因此,有一个文件 globalreact.d.ts
,它将是 https://github.com/borisyankov/DefinitelyTyped/blob/master/react/react.d.ts 的 编辑的 版本,格式为 declare module R
(而不是 declare module "react"
)。
全局变量导出
如果是浏览器,您需要将其放在 window
上。所以在文件 makeReactGlobal.ts
中执行以下操作:
var R = require('react');
(<any>window).R = R
然后在您的应用程序中 main
将此文件作为依赖项以确保它在您的任何其他代码之前执行。
就像@basarat 说的,看起来不太可能。 @ahejlsberg 本人在 github 上对这个问题进行了权衡:https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512.
你非常接近(把它放在一个 .d.ts
文件中某个地方 tsc 会找到它):
import * as React from "react";
declare global {
const R: typeof React;
}
(注意添加的“typeof”。尚未使用 React 进行测试,但它适用于 Vue。)
我有 React 类型定义文件(使用外部模块声明)。在我的源文件中,我通常这样做:
import * as R from "react"
然后可以愉快地以强类型方式使用 R.createElement(...
等。
我想要的是不必在每个文件中导入 R
,而是将其作为全局声明(是的,我愿意用一些变量污染全局命名空间)。我试过:
import * as React from "react";
declare var R : React;
虽然这不起作用,但我得到 "Cannot find name 'React'"
。还有另一种方法可以将整个模块导出为全局模块吗?
编辑 1 -
我应该说得更清楚:我对如何在 .d.ts
文件中导出全局 类型定义 很感兴趣。因此,假设我已经将 R
附加到 window
。现在我需要打字稿来知道 R
是 React module
.
declare
关键字没有在全局范围内声明变量。此关键字用于在全局范围内存在变量并且您想在 TypeScript 中使用它而不会出现编译错误的情况。
您可以声明一个全局变量:
import * as R from "react";
window.R = R;
instead have it as a global
这有两个方面:global type declaration
用于打字稿,global variable availability
用于 JavaScript 消费。
全局类型声明
A .d.ts
或声明仅有助于 global 名称声明 space 如果没有根级别 import 或 export 在文件中。因此,有一个文件 globalreact.d.ts
,它将是 https://github.com/borisyankov/DefinitelyTyped/blob/master/react/react.d.ts 的 编辑的 版本,格式为 declare module R
(而不是 declare module "react"
)。
全局变量导出
如果是浏览器,您需要将其放在 window
上。所以在文件 makeReactGlobal.ts
中执行以下操作:
var R = require('react');
(<any>window).R = R
然后在您的应用程序中 main
将此文件作为依赖项以确保它在您的任何其他代码之前执行。
就像@basarat 说的,看起来不太可能。 @ahejlsberg 本人在 github 上对这个问题进行了权衡:https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512.
你非常接近(把它放在一个 .d.ts
文件中某个地方 tsc 会找到它):
import * as React from "react";
declare global {
const R: typeof React;
}
(注意添加的“typeof”。尚未使用 React 进行测试,但它适用于 Vue。)