我试图在 TypeScript 中使用量角器和 Jasmine 编写测试。 TSD现已弃用,所以我必须使用'打字'操纵TypeScript定义。所以我安装了它:
npm install typings -g
然后我用它来安装Jasmine和Chance定义:
typings install jasmine --source dt --save –-global
typings install chance--source dt --save –-global
我还添加了“文件”部分,并排除了' node_modules':
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"declaration": false,
"noImplicitAny": false,
"outDir": "tmp",
"types": ["node", "jasmine", "chance"]
},
"files": [
"typings/index.d.ts"
],
"include": [
"lib",
"specs"
],
"exclude": [
"node_modules"
]
}
问题是WebStorm和Visual Code工作室都找不到所有Jasmine方法的定义和机会'模块。错误是:
**“TS2304: Cannot find name 'describe'”**
**“TS2307: Cannot find module 'chance'”**
分别。这是我的spec文件:
在' typings /'文件夹我看到TypeScript定义的引用链接:
我错过了什么吗?为什么我的IDE无法找到Jasmine和Chance的定义?
P.S。测试在转移到Javacript之后有效。
P.S.S。添加
后错误将消失///<reference path="###"/>
到spec文件。但我不想使用它。
Protractor: 4.0.9;
TypeScript 2.0.3;
Typings 1.5.0;
提前致谢!
答案 0 :(得分:6)
有一些因素阻碍了事情的发展。首先,如果您使用的是 Typescript 2.0 ,那么typings
也会被弃用。
Typescript 2.0 支持节点模块中的打包类型(通常由npm install @types/module-name
安装。明确键入的所有声明也可作为“@ types / *”命名空间下的npm模块使用,因此,如果您希望远离tsd
,typings
不应该是您的最终目的地。
话虽这么说,typescript 2.0仍然适用于打字,所以让我指出一些我在配置文件中看到的问题。
{
"types": ["node", "jasmine", "chance"]
}
类型,属性仅用于@types/*
中基于新的基于npm包的输入。由于您尚未使用此功能,因此您的tsconfig.json
不应包含此属性。 (有关此属性和相关属性的完整讨论,请参阅TypeScript 2: custom typings for untyped npm module。
{
"files": [
"typings/index.d.ts"
],
"include": [
"lib",
"specs"
],
"exclude": [
"node_modules"
]
}
虽然您可以选择同时使用这两个文件并包含属性,但这不是必需的。您可以将typings/index.d.ts
引用从files
数组移至include array
,然后删除files
。
此外,您遇到的最大问题是您的include
语法错误。 include
采用 glob 模式。你不能只是简单地放置文件夹名称,但需要通过递归模式跟随它们:
{
"include": [
"typings/index.d.ts",
"lib/**/*",
"specs/**/*"
],
}
最后一件事是你不需要排除node_modules
。只有在排除可能与您的包含模式匹配的内容时,才需要排除。由于您的node_modules
模式不匹配include
,因此无需将其排除。
我认为,如果你做出这些微小的改变,事情应该按照你的预期运作,但同样,我会真正考虑一直走向新的基于@types/*
的新版本,因为它们更容易管理更方便,不需要外部工具(除了npm),如typings或tsd。
答案 1 :(得分:1)
您需要按如下方式更新compilerOptions
:
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"declaration": false,
"noImplicitAny": false,
"outDir": "tmp",
"typeRoots": ["./typings"] // Updated!
},
typeRoots
自动包含编译中指定文件夹下的所有定义文件,而无需向相关文件添加引用指令,或者需要创建索引文件(然后需要创建索引文件)每当您添加新的环境库时都会更新。
您当前的配置("types": ["node", "jasmine", "chance"]
)仅会搜索node_modules/@types
中的定义文件,然后仅包含node
,jasmine
和chance
定义
tsconfig.json文档中对此进行了详细说明。
编辑:你正在使用JetBrains IDE。如果IDE正在为您编译JS,请确保它使用您的tsconfig.json
进行设置而不是自己的设置。这是偏好。