我有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
。
答案 0 :(得分:4)
而是将其作为全局
这有两个方面:global type declaration
用于打字稿,global variable availability
用于JavaScript消费。
如果没有根级别导入或导出,则.d.ts
或声明仅对全局名称声明空间有贡献在文件中。因此,请将文件globalreact.d.ts
作为declare module R
形式的https://github.com/borisyankov/DefinitelyTyped/blob/master/react/react.d.ts的已编辑版本(而不是declare module "react"
)。
如果是浏览器,您需要将其置于window
。请在文件makeReactGlobal.ts
中执行以下操作:
var R = require('react');
(<any>window).R = R
然后在您的应用程序中main
使该文件具有依赖关系,以确保它在您的任何其他代码之前执行。
答案 1 :(得分:1)
declare
关键字未在全局范围内声明变量。此关键字用于全局范围中存在变量并且您希望在TypeScript中使用它而不会出现编译错误的情况。
您可以使用:
声明全局变量import * as R from "react";
window.R = R;
答案 2 :(得分:1)
就像@basarat说的那样,它看起来并不可能。 @ahejlsberg自己在github上讨论了这个问题:https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512。