我很难获得打字稿来识别本地es6模块的形状:
转换-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
注意:我想弄清楚如何在不将convert-time.js
更改为打字稿文件的情况下使其工作。
以下是我尝试将其导入的文件:
index.ts
/// <reference path="../typings/convert-time.d.ts" />
import { minutes, days } from '../test/helpers/convert-time'
这是我创建的类型定义文件:
转换-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:
tsconfig.json
{
"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
的StackOverflow。大多数问题都与具有类型定义的外部模块有关。我无法找到本地模块的示例。typings/convert-time.d.ts
添加到files
中的tsconfig.json
部分。/// <reference path='../../typings/convert-time.d.ts' />
添加到index.ts
以上都没有奏效!我必须学会什么黑暗魔法让它发挥作用?谢谢!
答案 0 :(得分:3)
关于ES6
由于您正在尝试与ES6模块互操作,因此您将“#34;
a)将tsconfig.json
更改为目标ES6并发出如下ES6模块:
{
...
"target": "es6",
"module": "es6",
...
}
但是我不认为你可以在NodeJS中使用ES6模块。
或:
b)让TypeScript将ES6 JavaScript模块转换为ES5,方法是在tsconfig.json
compilerOptions
下启用JavaScript处理 - 如下所示,并确保.js包含/不包括文件:
{
...
"target": "es5",
"module": "commonjs",
"allowJs": true,
...
}
关于您的类型声明
在我的博客上阅读有关TypeScript如何发现打字/类型声明以及它希望在此处看到的内容:http://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旁边,它是一个&#34;外部&#34;模块而不是&#34;环境&#39; (请参阅我的博客)(如果你正在创建一个生活在你自己的NPM包代码中的打字,你将需要declare
位。基本上:
<强> ../测试/助手/转换-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
<强> ../测试/助手/转换-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;
<强> index.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"
]
}