[英]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.