簡體   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