首页 文章

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

提问于
浏览
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 回答

  • 4

    而是把它作为一个全球性的

    这有两个方面: global type declaration 用于打字稿, global variable availability 用于JavaScript消费 .

    全球类型声明

    如果文件中没有根级别导入或导出,则 .d.ts 或声明仅对全局名称声明空间有贡献 . 所以有一个 globalreact.d.ts 文件,它将是 declare module R 的编辑版本 declare module R (而不是 declare module "react" ) .

    全局变量导出

    如果是浏览器,你需要把它放在 window 上 . 所以在 makeReactGlobal.ts 文件中执行以下操作:

    var R = require('react'); 
    (<any>window).R = R
    

    然后在您的应用程序中 main 将此文件设置为依赖项,以确保它在您的任何其他代码之前执行 .

  • 1

    declare 关键字未在全局范围内声明变量 . 此关键字用于全局范围中将存在变量并且您希望在TypeScript中使用它而不会出现编译错误的情况 .

    您可以使用以下命令声明全局变量:

    import * as R from "react";
    window.R = R;
    
  • 1

    就像@basarat说的那样,它不可能 . @ahejlsberg自己在github上讨论了这个问题:https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512 .

相关问题