我正在尝试将.js文件导入打字稿文件。 是的,我知道...我也看过其他问题,但我无法弄清楚这个问题。
.js文件是使用canopy生成的,看起来像这样:
(function() {
'use strict';
......
var exported = { Grammar: Grammar, Parser: Parser, parse: parse };
if (typeof require === 'function' && typeof exports === 'object') {
extend(exports, exported);
} else {
var namespace = typeof this !== 'undefined' ? this : window;
namespace.URLP = exported;
}
})();
我已经声明过输入:
declare namespace URLP {
function parse(input: any, options?: any): void;
}
declare module '*.js';
我的tsconfig.json具有:
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"target": "es5",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"],
"allowJs": true
如果我使用import { URLP } from './urlp.js';
导入.js文件,则会引发以下错误:
error TS2306: File '..../urlp.js' is not a module.
奇怪的是,我可以加载Web应用程序并在浏览器中使用URLP.parse()方法。
如果我尝试使用import './urlp.js'
导入它,则不会出现编译错误,但是在浏览器中URLP变得不确定。
答案 0 :(得分:0)
此错误表示您没有export
JS文件中的任何内容。相反,您使用了全局exports
(或module.exports
)对象。尝试改用require
语法:
const { URLP } = require('./urlp.js');
请注意,这将阻止TypeScript进行静态代码分析来确定编译时导出的内容,因此根本不会键入您在外部JS文件中使用的所有内容。
如果您遇到类似Cannot find name 'require'.
的错误,请使用declare function require(path: string): any;