[英]Typescript cannot find local es6 module; error TS2307: Cannot find module
我很难让打字稿识别本地 es6 模块的形状:
转换时间.js
export const minutes = sec => sec * 60
export const hours = sec => minutes(sec) * 60
export const days = sec => hours(sec) * 24
export const weeks = sec => days(sec) * 24
export const years = sec => days(sec) * 365
注意:我想弄清楚如何在不将convert-time.js
更改为打字稿文件的情况下使其工作。
这是我尝试将其导入的文件:
索引.ts
/// <reference path="../typings/convert-time.d.ts" />
import { minutes, days } from '../test/helpers/convert-time'
这是我创建的类型定义文件:
转换时间.d.ts:
declare module "convert-time" {
export function minutes(sec: number): number;
export function hours(sec: number): number;
export function days(sec: number): number;
export function weeks(sec: number): number;
export function years(sec: number): number;
}
这是我的 tsconfig:
配置文件
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"jsx": "react"
},
"files": [
"typings/index.d.ts",
"typings/convert-time.d.ts"
],
"exclude": [
"node_modules"
]
}
尝试的步骤:
error TS2307: Cannot find module
。 大多数问题都与具有类型定义的外部模块有关。 我找不到本地模块的示例。typings/convert-time.d.ts
中的files
部分添加了tsconfig.json
typings/convert-time.d.ts
tsconfig.json
。/// <reference path='../../typings/convert-time.d.ts' />
到index.ts
以上都没有奏效! 我必须学习什么黑魔法才能让它发挥作用? 谢谢!
关于 ES6
由于您正在尝试与 ES6 模块进行互操作,因此您要么“
a)将您的tsconfig.json
更改为目标 ES6 并发出这样的 ES6 模块:
{
...
"target": "es6",
"module": "es6",
...
}
但是我认为您还不能在 NodeJS 中使用 ES6 模块。
或:
B)设打字稿transpile的ES6的JavaScript模块向下到ES5通过启用JavaScript处理您的tsconfig.json
下compilerOptions
-像下面,并确保该.js文件包含/不排除:
{
...
"target": "es5",
"module": "commonjs",
"allowJs": true,
...
}
关于你的类型声明
阅读我的博客,了解 TypeScript 如何发现类型/类型声明以及它希望在这里看到的内容: https : //ivanz.com/2016/06/07/how-does-typescript-discover-type-declarations-definitions- javascript
看起来这个 JavaScript 文件是你自己的代码(不是 NPM 模块),所以:
/// <reference path="../typings/convert-time.d.ts" />
只要文件没有被排除或包含在tsconfig.json
convert-time.d.ts
是在同一个目录中convert-time.js
declare module "convert-time" {
位。 这是因为通过将 .d.ts 放在 .js 旁边,它是一个“外部”模块而不是“环境”(请参阅我的博客)(例如,如果您正在创建属于您自己的类型,则需要declare
位NPM 包的代码)基本上:
../test/helpers/convert-time.js:
export const minutes = sec => sec * 60
export const hours = sec => minutes(sec) * 60
export const days = sec => hours(sec) * 24
export const weeks = sec => days(sec) * 24
export const years = sec => days(sec) * 365
../test/helpers/convert-time.ts.d:
export function minutes(sec: number): number;
export function hours(sec: number): number;
export function days(sec: number): number;
export function weeks(sec: number): number;
export function years(sec: number): number;
索引.ts:
import { minutes, days } from '../test/helpers/convert-time';
tsconfig.json(用于 ES5 转译)
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"allowJs": true,
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"jsx": "react"
},
"files": [
"/test/helpers/convert-time.ts.d",
"/test/helpers/convert-time.js",
"index.ts"
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.