我有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
.
3 回答
这有两个方面:
global type declaration
用于打字稿,global variable availability
用于JavaScript消费 .全球类型声明
如果文件中没有根级别导入或导出,则
.d.ts
或声明仅对全局名称声明空间有贡献 . 所以有一个globalreact.d.ts
文件,它将是declare module R
的编辑版本declare module R
(而不是declare module "react"
) .全局变量导出
如果是浏览器,你需要把它放在
window
上 . 所以在makeReactGlobal.ts
文件中执行以下操作:然后在您的应用程序中
main
将此文件设置为依赖项,以确保它在您的任何其他代码之前执行 .declare
关键字未在全局范围内声明变量 . 此关键字用于全局范围中将存在变量并且您希望在TypeScript中使用它而不会出现编译错误的情况 .您可以使用以下命令声明全局变量:
就像@basarat说的那样,它不可能 . @ahejlsberg自己在github上讨论了这个问题:https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512 .