- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试在 other places 中发布的建议后,我发现自己无法运行使用无类型 NPM 模块的 typescript 项目。下面是一个最小的例子和我尝试过的步骤。
对于这个最小的例子,我们假设 lodash
没有现有的类型定义。因此,我们将忽略包 @types/lodash
并尝试手动添加其打字文件 lodash.d.ts
到我们的项目。
文件夹结构
foo.ts
///<reference path="../typings/custom/lodash.d.ts" />
import * as lodash from 'lodash';
console.log('Weeee');
lodash.d.ts
直接复制原版
@types/lodash
包。
index.d.ts
/// <reference path="custom/lodash.d.ts" />
/// <reference path="globals/lodash/index.d.ts" />
package.json
{
"name": "ts",
"version": "1.0.0",
"description": "",
"main": "index.js",
"typings": "./typings/index.d.ts",
"dependencies": {
"lodash": "^4.16.4"
},
"author": "",
"license": "ISC"
}
tsconfig.json
{
"compilerOptions": {
"target": "ES6",
"jsx": "react",
"module": "commonjs",
"sourceMap": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"typeRoots" : ["./typings"],
"types": ["lodash"]
},
"include": [
"typings/**/*",
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
typings.json
{
"name": "TestName",
"version": false,
"globalDependencies": {
"lodash": "file:typings/custom/lodash.d.ts"
}
}
foo.ts
中导入它typings
房产在package.json
typeRoots
在 tsconfig.json
带文件 typings/index.d.ts
types
在 tsconfig.json
types
目录在 tsconfig.json
typings.json
文件和运行 typings install
E:\temp\ts>tsc
error TS2688: Cannot find type definition file for 'lodash'.
最佳答案
不幸的是,这些东西目前没有很好的文档记录,但即使你能够让它工作,让我们回顾一下你的配置,以便你了解每个部分在做什么以及它如何与 typescript 处理和加载类型相关。
首先让我们回顾一下您收到的错误:
error TS2688: Cannot find type definition file for 'lodash'.
typeRoots
和
types
属性的误解,所以让我们更详细地了解这些。
typeRoots:[]
和
types:[]
属性的事情是它们是
而不是 加载任意声明(
*.d.ts
)文件的通用方法。
typeRoots
的默认值是:
{
"typeRoots" : ["node_modules/@types"]
}
node_modules/@types
文件夹并尝试加载它在那里找到的每个子文件夹作为
npm 包 。
{
"typeRoots" : ["./typings"]
}
./typings
文件夹中的
子文件夹 并尝试将它找到的每个子文件夹加载为 npm 模块。
typeRoots
指向
./typings
但还没有设置任何
types:[]
属性。您可能会看到以下错误:
error TS2688: Cannot find type definition file for 'custom'.
error TS2688: Cannot find type definition file for 'global'.
tsc
正在扫描您的
./typings
文件夹并找到子文件夹
custom
和
global
。然后它试图将这些解释为 npm 包类型类型,但是这些文件夹中没有
index.d.ts
或
package.json
,因此您会收到错误消息。
types: ['lodash']
属性。这有什么作用?默认情况下, typescript 将加载
在 typeRoots
中找到的所有 子文件夹。如果您指定
types:
属性,它只会加载那些特定的子文件夹。
./typings/lodash
文件夹,但它不存在。这就是为什么你得到:
error TS2688: Cannot find type definition file for 'lodash'
typeRoots
和
types
来加载打包在 npm 包中的声明文件。如果您有自定义类型或单个松散的
d.ts
文件,这些文件不包含在遵循 npm 包约定的文件夹中,那么这两个新属性不是您想要使用的。 Typescript 2.0 并没有真正改变它们的使用方式。您只需要以多种标准方式之一将这些文件包含在您的编译上下文中:
.ts
文件中:///<reference path="../typings/custom/lodash.d.ts" />
./typings/custom/lodash.d.ts
属性中包含 files: []
。 ./typings/index.d.ts
属性中包含 files: []
(然后递归地包含其他类型。./typings/**
添加到您的 includes:
tsconfig.json
让事情再次合作。
typeRoots
和
types
属性实际上只对
自动 全局声明的加载有用。
npm install @types/jquery
$
将在您的所有脚本中可用,而无需执行任何进一步的
///<reference/>
或
import
typeRoots:[]
属性旨在添加额外的位置,从那里自动加载类型包。
types:[]
属性的主要用例是禁用自动加载行为(通过将其设置为空数组),然后仅列出要全局包含的特定类型。
typeRoots
加载类型包的另一种方法是使用新的
///<reference types="jquery" />
指令。注意
types
而不是
path
。同样,这仅对全局声明文件有用,通常是那些不执行
import/export
的文件。
typeRoots
混淆的一件事。记住,我说过
typeRoots
是关于模块的全局包含。但是
@types/folder
也参与标准模块解析(无论您的
typeRoots
设置如何)。
includes
、
excludes
、
files
、
typeRoots
和
types
选项。所以当你这样做时:
import {MyType} from 'my-module';
baseUrl
、
paths
和
moduleResolution
。
node
模块解析时,它将开始搜索文件名
my-module.ts
、
my-module.tsx
、
my-module.d.ts
,从您的
baseUrl
配置指向的文件夹开始。
my-module
的文件夹,然后搜索一个带有
package.json
属性的
typings
,如果里面有
package.json
或没有
typings
属性告诉它要加载哪个文件,然后搜索
index.ts/tsx/d.ts
在那个文件夹内。
node_modules
文件夹中从您的
baseUrl/node_modules
开始搜索这些相同的内容。
baseUrl/node_modules/@types
以查找所有相同的内容。
node_modules
和
node_modules/@types
。它将继续向上目录,直到它到达您的文件系统的根目录(甚至在您的项目之外获取节点模块)。
typeRoots
。因此,如果您配置了
typeRoots: ["./my-types"]
,则在显式模块解析期间不会搜索到它。它仅用作一个文件夹,您可以在其中放置要提供给整个应用程序的全局定义文件,而无需进一步导入或引用。
paths
属性)覆盖模块行为。例如,我提到在尝试解析模块时不会咨询任何自定义
typeRoots
。但是如果你喜欢你可以让这种行为发生:
"paths" :{
"*": ["my-custom-types/*", "*"]
}
*
表示您的初始导入字符串。例如,如果您导入:
import {MyType} from 'my-types';
import {MyType} from 'my-custom-types/my-types'
*
,这意味着初始导入。
.ts
的自定义
import
模块。
"paths" :{
"*": ["my-types", "some/custom/folder/location/my-awesome-types-file"]
}
import {MyType} from 'my-types';
some/custom/folder/location/my-awesome-types-file.d.ts
读取这些类型
关于 typescript 2 : custom typings for untyped npm module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40222162/
我试图理解为什么人们会在 typed actors 上使用无类型的 actor .我已经阅读了几篇关于此的文章,其中一些如下: What is the difference between Typed
我使用了 TStringList 和类似的东西: geo: TStringList; response: TStringStream; begin http:=tidhttp.Create(n
我在为变量提供计数值时遇到错误(不知道这是否有意义)。 iCount := inc(iCount,1); 这是我的代码: var iCount : Integer; procedure TForm
我正在创建一个使用波兰语表示法(前缀)的YACC程序。实现起来似乎很简单,但是我遇到了一个似乎没有道理的错误。错误是: yacc:e-“calculator.y”的第33行,未键入$ 1('-') 这
我检查了问题的历史记录、搜索 google 和其他结果,但仍然对 C# reportViewer 感到完全困惑。它似乎只想使用“类型化”数据集。正如许多其他人询问的那样,我没有看到真正的答案,也许新的
以下是我正在处理的文件预览系统项目的示例。主窗体上有两个ListBoxes。第一个[lst_fileList]显示目录[files]中所有“.txt”文件的列表,每个文件的标签为[order ###。
我收到流程错误: Importing a type from an untyped module makes it any and is not safe! Did you mean to add /
这个问题在这里已经有了答案: Does "untyped" also mean "dynamically typed" in the academic CS world? (9 个回答) 关闭 6
好的,所以我完全相信 TypeScript 的想法,我想将它用于现有的软件项目。现在,由于 Typescript 是 javascript 的超集,这意味着我可以先将所有文件重命名为具有 .ts 扩展
尝试在 other places 中发布的建议后,我发现自己无法运行使用无类型 NPM 模块的 typescript 项目。下面是一个最小的例子和我尝试过的步骤。 对于这个最小的例子,我们假设 lod
我正在阅读一个幻灯片,上面写着“JavaScript 未输入类型”。这与我认为的真实情况相矛盾,因此我开始挖掘以尝试了解更多信息。 对 Is JavaScript an untyped languag
我开始使用 Scala 宏,它们很棒,但我遇到了类型化(又名类型检查)和非类型化 Tree 之间的区别s。 例如,您不能拨打 c.eval出于某种原因使用类型检查树。我在 scala 宏文档中找不到关
我想创建一个类工厂,它可以创建对它们一无所知的类(例如,不包含 header )。我使用 map 创建了一个工厂类,它通过字符串 ( map(string, mystruct) ) 存储有关类的信息(
我有一个定义 JavaFX 用户界面的 FXML 文件。在 FXML 文件中,我有以下内容: ... ... 当我尝试使用以下代码加载我的 FXML 文件时,我得到一个带有消息的 javafx.f
当我更新模型时,它抛出“不支持非开放类型中的无类型值”。更新之前它可以工作。无法确定问题的根源。有任何想法吗。 最佳答案 我之前遇到过这个错误,它是由于传递数据模型上不存在的 JSON 对象的属性引起
我尝试阅读 Akka 文档以找出 Typed 和 Untyped Actor 之间的确切区别。什么时候用什么?我不确定我错过了什么。有人可以在这里指出一些相关的东西或提供这个问题的答案吗? 最佳答案
这段带有泛型的代码片段工作得很好( Link to Simple and Working Code ) const state: Record = { isPending: false,
package main import ( "fmt" ) func printArray(x [3]int) { fmt.Printf("%d", x[1]); // can
我找不到我安装的 NodeJS 包之一的 TypeScript 定义 @type/{name},所以我尝试为它编写一个 d.ts 文件, 并将文件放在 {project root}\typings 文
我让 ServiceStack OrmLite (5.1.1) 创建表,并保留包含 TimeSpan 的对象: // ... public TimeSpan _Jobs_VehicleNotifica
我是一名优秀的程序员,十分优秀!