前一个是this one。目前的一个是Overview/reachbz.ts(3,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module.
有人可以向我解释amd模块在打字稿中的工作原理吗?在阅读打字稿页面上的信息后,我仍然无法弄清楚它是如何工作的以及出了什么问题。
我有一个git repo来重现错误:
git clone https://github.com/amsterdamharu/typescriptHorrors.git
` 按照要求;这是文件:
///<reference path="../typings/immutable-3.8.1.d.ts" />
import Immutable = require("typings/immutable-3.8.1");//error here
console.log("Immutable:",Immutable);
/typings/immutable-3.8.1.d.ts这里:https://github.com/facebook/immutable-js/blob/master/type-definitions/Immutable.d.ts
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"watch": false,
"module": "amd",
"removeComments": true,
"sourceMap": false,
"outDir": ".",
"rootDir": "."
}
}
task.json(对于vscode)
{
"version": "0.1.0",
"command": "tsc.cmd",
"isShellCommand": true,
"showOutput": "always",
"problemMatcher": "$tsc"
}
这是在Windows机器上运行但在linux上尝试使用相同的错误。使用tsc节点:
[me@localhost ts]$ tsc
Overview/reachbz.ts(4,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module.
代码编译并使用requirejs但错误阻止我发布它。
这是另一件我不太懂的事情。打字稿应该是可选的侵入式,但它会将应该警告的内容(在编译后生成有效的脚本)升级为错误,因此在Visual Studio中您无法发布项目。
[UPDATE]
使用以下命令更改定义文件的内容:
export var whatever
使错误消失。
但是以下内容会导致错误回复
declare module Immutable {}
declare module "immutable" {
export = Immutable
}
有没有人可以编译git repo?它使用原始的不可变git repo定义文件但我无法使用它来使用node tsc Version 1.8.10
答案 0 :(得分:2)
在您的代码中:
import Immutable = require("typings/immutable-3.8.1");//error here
绝对不是否。
首先:您不需要下载immutable
的任何类型定义。他们带有不可变的js。
其次:您不是require
TypeScript 定义。您实际上需要实际运行时事物。在您的情况下,immutable
import Immutable = require('immutable')
为{{1}}。
环境定义旨在匹配 javascript运行时导入。因此,您将打字稿定义放入编译上下文中(例如,使用tsconfig.json),然后只编写JavaScript。更多:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html
答案 1 :(得分:0)
我猜基于定义文件的内容,typescript使用不同的规则来解析你传递给要求的字符串。在这种情况下,因为定义有:
declare module "immutable" {
export = Immutable;
}
我需要使用字符串&#34; immutable&#34;而name of the definition file并不重要。
将定义文件更改为:
declare module "reverseEngineerInsteadOfDocumented" {
export = Immutable;
}
将更改传递给require的字符串更改为:
import Immutable = require("reverseEngineerInsteadOfDocumented");