我阅读了TypeScript模块解析的工作原理。

我有以下存储库:@tsstack/di。编译后,目录结构如下:

├── dist
│   ├── annotations.d.ts
│   ├── annotations.js
│   ├── index.d.ts
│   ├── index.js
│   ├── injector.d.ts
│   ├── injector.js
│   ├── profiler.d.ts
│   ├── profiler.js
│   ├── providers.d.ts
│   ├── providers.js
│   ├── util.d.ts
│   └── util.js
├── LICENSE
├── package.json
├── README.md
├── src
│   ├── annotations.ts
│   ├── index.ts
│   ├── injector.ts
│   ├── profiler.ts
│   ├── providers.ts
│   └── util.ts
└── tsconfig.json

在package.json中,我写了“main”:“dist/index.js”。

在Node.js中,一切正常,但TypeScript:

import {Injector} from '@ts-stack/di';

找不到模块“@ts stack/di”的声明文件/path/to/node_modules/@tsstack/di/dist/index.js”隐式具有“any”类型。

然而,如果我按如下方式导入,那么一切都正常:

import {Injector} from '/path/to/node_modules/@ts-stack/di/dist/index.js';

我做错了什么?


当前回答

import { io, Socket,SocketIOClient } from 'socket.io-client';

在component.ts之上添加这个在我的案例中是有效的。

其他回答

您可能需要创建扩展名为.d.ts的文件。

将此文件名推送到tsconfig.json文件的include键下:

  "include": [
    "src",
    "index.d.ts"
  ]

这应该是工作

解决方案:您所要做的就是编辑TypeScript Config文件tsconfig.json,并添加一个新的键值对作为

"compilerOptions": {
"noImplicitAny": false
}
import { io, Socket,SocketIOClient } from 'socket.io-client';

在component.ts之上添加这个在我的案例中是有效的。

您所要做的就是编辑TypeScript Config文件(tsconfig.json),并添加一个新的键值对作为“noImplicitAny”:false

从Typescript文档中:

注意,“typings”字段与“type”同义,也可以使用。

还要注意,如果主声明文件名为index.d.ts,并且位于包的根目录(index.js旁边),则不需要标记types属性,尽管这样做是明智的。

由于某种原因,我的“types”属性指向一些main.d.ts。从package.json中删除该行,它开始工作。