繁体   English   中英

Typescript 找不到本地 es6 模块; 错误 TS2307:找不到模块

[英]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"
  ]
}

尝试的步骤:

以上都没有奏效! 我必须学习什么黑魔法才能让它发挥作用? 谢谢!

关于 ES6

由于您正在尝试与 ES6 模块进行互操作,因此您要么“

a)将您的tsconfig.json更改为目标 ES6 并发出这样的 ES6 模块:

{
  ...
  "target": "es6",
  "module": "es6",
  ...
}

但是我认为您还不能在 NodeJS 中使用 ES6 模块。

或:

B)设打字稿transpile的ES6的JavaScript模块向下到ES5通过启用JavaScript处理您的tsconfig.jsoncompilerOptions -像下面,并确保该.js文件包含/不排除:

{
  ...
  "target": "es5",
  "module": "commonjs",
  "allowJs": true,
  ...
}

关于你的类型声明

阅读我的博客,了解 TypeScript 如何发现类型/类型声明以及它希望在这里看到的内容: https : //ivanz.com/2016/06/07/how-does-typescript-discover-type-declarations-definitions- javascript

看起来这个 JavaScript 文件是你自己的代码(不是 NPM 模块),所以:

  1. 你不需要/// <reference path="../typings/convert-time.d.ts" />只要文件没有被排除或包含在tsconfig.json
  2. 确保convert-time.d.ts是在同一个目录中convert-time.js
  3. 您不需要声明模块,因此删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM