为什么在使用TypeScript导入dojox / gfx时需要<reference path =“...”>?

时间:2018-06-14 00:46:19

标签: javascript typescript dojox.gfx

我们有一个TypeScript项目,我们需要使用Dojo&#39; createSurface。但是,我们意外地需要包含<reference path="..."/>,如下所示。

/// <reference path="node_modules/@types/dojo/dojox.gfx.d.ts"/>
import gfx1 = require("dojox/gfx");
import gfx2 from "dojox/gfx";
import * as gfx3 from "dojox/gfx";
import { createSurface } from "dojox/gfx";

const el = new HTMLElement();

gfx1.createSurface(el, 100, 100); // require
gfx2.createSurface(el, 100, 100); // from
gfx3.createSurface(el, 100, 100); // star
createSurface(el, 100, 100);      // single method

我本来期望不要求<reference path="..."/>但是如果没有它,TypeScript会抱怨它找不到所显示的每个require / import语句的模块。

我们的package.json是

{
  "name": "react-dojo",
  "version": "1.0.0",
  "main": "index.ts",
  "scripts": {
    "build": "tsc"
  },
  "license": "MIT",
  "devDependencies": {},
  "dependencies": {
    "@types/dojo": "1.9.40",
    "@types/react": "^16.3.17",
    "@types/react-dom": "^16.0.6",
    "dojo": "^1.13.0",
    "react": "^16.4.0",
    "react-dom": "^16.4.0",
    "typescript": "2.9.1"
  }
}

我们的tsconfig.json是

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "jsx": "react",
    "strict": true,
    "esModuleInterop": true
  },
  "exclude": ["dist", "node_modules"]
}

我们如何(不能)导入没有<reference path=""/>的Dojox模块?

2012年6月4日更新

在进一步检查道场的类型定义后,我发现我可以在没有<reference path="..."/>的情况下做到这样......

import * as dojox from "dojo/main.dojox";
dojox.gfx.createSurface(el, 100, 100);

// or

import { gfx } from "dojo/main.dojox";
gfx.createSurface(el, 100, 100);

这是因为@types/dojo/index.d.ts导出了以下模块。

declare module "dojo/main.dojox" {
    var exp: dojo.main.dojox
    export=exp;
}

然而,index.d.ts中的dojox接口将gfx定义为Object。打字稿然后警告

  

Property&#39; createSurface&#39;类型&#39; dojox&#39;

上不存在

作为测试,我创建了一个只包含以下依赖项的新项目。

"dependencies": {
  "@types/dojo": "1.9.40",
  "typescript": "2.9.1"
}

然后我在gfx: Object内将gfx: dojox.gfx;更改为index.d.ts。这似乎解决了这个测试项目的所有问题。

我尝试对原始项目执行相同操作,但TypeScript会警告

  

node_modules/@types/dojo/index.d.ts(26014,24):错误TS2694:命名空间&#39; dojox&#39;没有导出的成员&#39; gfx&#39;。

我已经验证node_modules/@types/dojo的内容是相同的,并且两个项目都使用相同的TypeScript版本。 tsconfig.json文件也是一样的。

为什么一个项目会看到导出的成员而另一个项目看不到?

0 个答案:

没有答案