@types 和 typescript 类型解析
@types and typescript type resolving
我有一个包含 polymer@next 作为 yarn 模块的项目,将其添加为纯 JS 库。我想使用来自 polymer 2.4 github 存储库的类型文件夹中的类型: https://github.com/Polymer/polymer/tree/2.4-pre/types
所以我开始创建一个@types 文件夹并在其中添加一个@polymer 文件夹,其中包含 package.json 和 index.d.ts 以及存储库中的所有文件。
无论我尝试什么,tsc 都找不到并接受聚合物元素类型。它作为聚合物中的一个文件位于 @types 文件夹中...
我的@typings 的结构包含:
+ @types
++++ @polymer
------ package.json
------ index.d.ts
------ polymer-element.d.ts
我的代码 (app.ts) 包含:
从'@polymer/polymer/polymer-element'
导入{元素}
我也尝试将 'polymer-element.d.ts' 放在 'polymer' 子文件夹中,但这也会产生相同的错误:
src/myapp.ts(3,25): error TS7016: Could not find a declaration file for
module '@polymer/polymer/polymer-element'.
'/Users/johngorter/Desktop/polymernext/node_modules/@polymer/polymer/polymer-element.js' implicitly has an 'any' type.
Try `npm install @types/@polymer/polymer/polymer-element` if it exists or add a new declaration (.d.ts) file containing `declare module '@polymer/polymer/polymer-element';`
我在这里错过了什么?为什么 tsc --traceResolution 没有给我正确的见解?
谢谢
约翰.
正如@Polymer 的定义,它是一个命名空间并且(如我所见)没有 export
成员,因此尝试使用此解决方法:
import polymerElement = require('@polymer/polymer/polymer-element');
如果它不起作用,请尝试仅使用 @polymer /lib 路径中的一种类型,看看它是否至少解决了那个问题。
看看这个:
编辑 -- 解决方案 1
implicitly has an 'any' type
更改您的 tsconfig 文件应该可以解决错误:
{ "compilerOptions":
{ "target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false // <-----
}
好的,所以我基本上创建了一个@types 文件夹,并为每个导入的命名模块创建了一个文件夹:
import '@polymer/polymer/polymer'
import { Element } '@polymer/polymer/polymer-element'
我直接在@types文件夹下创建了一个子文件夹,每个子文件夹包含一个index.d.ts文件,所以结构是:
@types
----@polymer
--------index.d.ts
----@polymer-element
--------index.d.ts
在这些索引类型文件中,我引用了从存储库 (polymer 2.4) 下载的类型定义,并创建了一个命名模块定义,如下所示:
declare module "@polymer/polymer/polymer-element" {
/**
* Base class that provides the core API for Polymer's meta-programming
* features including template stamping, data-binding, attribute deserialization,
* and property change observation.
*/
class Element extends
Polymer.ElementMixin(
HTMLElement) {
}
}
现在可以了...
我有一个包含 polymer@next 作为 yarn 模块的项目,将其添加为纯 JS 库。我想使用来自 polymer 2.4 github 存储库的类型文件夹中的类型: https://github.com/Polymer/polymer/tree/2.4-pre/types
所以我开始创建一个@types 文件夹并在其中添加一个@polymer 文件夹,其中包含 package.json 和 index.d.ts 以及存储库中的所有文件。
无论我尝试什么,tsc 都找不到并接受聚合物元素类型。它作为聚合物中的一个文件位于 @types 文件夹中...
我的@typings 的结构包含:
+ @types
++++ @polymer
------ package.json
------ index.d.ts
------ polymer-element.d.ts
我的代码 (app.ts) 包含: 从'@polymer/polymer/polymer-element'
导入{元素}我也尝试将 'polymer-element.d.ts' 放在 'polymer' 子文件夹中,但这也会产生相同的错误:
src/myapp.ts(3,25): error TS7016: Could not find a declaration file for
module '@polymer/polymer/polymer-element'.
'/Users/johngorter/Desktop/polymernext/node_modules/@polymer/polymer/polymer-element.js' implicitly has an 'any' type.
Try `npm install @types/@polymer/polymer/polymer-element` if it exists or add a new declaration (.d.ts) file containing `declare module '@polymer/polymer/polymer-element';`
我在这里错过了什么?为什么 tsc --traceResolution 没有给我正确的见解?
谢谢 约翰.
正如@Polymer 的定义,它是一个命名空间并且(如我所见)没有 export
成员,因此尝试使用此解决方法:
import polymerElement = require('@polymer/polymer/polymer-element');
如果它不起作用,请尝试仅使用 @polymer /lib 路径中的一种类型,看看它是否至少解决了那个问题。
看看这个:
编辑 -- 解决方案 1
implicitly has an 'any' type
更改您的 tsconfig 文件应该可以解决错误:
{ "compilerOptions":
{ "target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false // <-----
}
好的,所以我基本上创建了一个@types 文件夹,并为每个导入的命名模块创建了一个文件夹:
import '@polymer/polymer/polymer'
import { Element } '@polymer/polymer/polymer-element'
我直接在@types文件夹下创建了一个子文件夹,每个子文件夹包含一个index.d.ts文件,所以结构是:
@types
----@polymer
--------index.d.ts
----@polymer-element
--------index.d.ts
在这些索引类型文件中,我引用了从存储库 (polymer 2.4) 下载的类型定义,并创建了一个命名模块定义,如下所示:
declare module "@polymer/polymer/polymer-element" {
/**
* Base class that provides the core API for Polymer's meta-programming
* features including template stamping, data-binding, attribute deserialization,
* and property change observation.
*/
class Element extends
Polymer.ElementMixin(
HTMLElement) {
}
}
现在可以了...