在我的打字稿项目中,我使用:
const program = require('commander');
const figlet = require('figlet');
const AWS = require('aws-sdk');为了遵守tslint的import规则,我想重构这些行,通过no-var-requires来工作。然而,它的工作方式却让我无法理解。
对于小雕像,我尝试了两种方法:
import figlet from 'figlet';
import * as figlet from 'figlet';然而,我得到了:
bin/console.ts(1,20): error TS2307: Cannot find module 'figlet'.我应该如何导入这些库?
发布于 2016-11-28 10:58:22
关键是TypeScript必须能够找到您所引用的模块,所以它可以键入检查您对它的使用情况。在没有更多信息的情况下,很难知道如何在项目中准确地做到这一点,但通常的答案是为您感兴趣的JavaScript库安装类型定义。
如果您没有现有的基础设施,那么最简单的方法就是npm。例如,对于aws,如果您运行npm install --save @types/aws-sdk,那么类型定义将被下载到项目中的node_modules/@types/aws-sdk中,TypeScript编译器将自动在那里找到它们,所以如果您导入aws,它就会知道发生了什么。
对指挥官来说也是如此。但是Figlet似乎没有任何已发布的声明文件,因此您必须将自己的声明文件组合在一起。您可以实际描述这些类型,也可以显式地赋予模块any类型:
any类型并忽略这个问题要容易得多,但是在使用figlet时您将得不到任何类型的系统支持。不过,这里有一个缩写:在您的项目中创建一个figlet.d.ts文件,并在其中放置declare module "figlet";。这是一个速记环境模块,应该足以让您成功地导入小图。发布于 2018-06-16 19:00:27
Tim的答案是完美的,错误是因为导入某些类型记录需要它的类型定义(在目标package.json中的属性“类型”指向一个带有模块描述的.d.ts文件)。
您也可以尝试如下:import figlet = require('figlet')和in tsconfig.json compilerOptions.esModuleInterop === true
关于等值问题,这使我不得不开始:
import * as foo from 'foo';等同于const foo = require('foo') (foo正在执行module.exports = foo)import {bar} from 'foo'等同于const bar = require('foo').bar (foo正在执行module.exports = {bar} )希望它能帮上忙
https://stackoverflow.com/questions/40841127
复制相似问题