将Typescript全局变量声明为“模块”类型

时间:2015-05-13 15:55:26

标签: typescript typescript1.5

我有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 个答案:

答案 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