当前位置: 首页 > 知识库问答 >
问题:

如何用TypeScript1.8包含非类型化节点模块?

荀博
2023-03-14

TypeScript1.8现在支持非类型化的JS文件。要启用此特性,只需添加编译器标志--allowJs或将“allowJs”:true添加到tsconfig.json中的compilerOptions中

通过https://blogs.msdn.microsoft.com/typescript/2016/01/28/uncasting-typescript-1-8-beta/

我正在尝试导入react-tap-event-plugin,它没有一个类型文件。

import * as injectTapEventPlugin from 'injectTapEventPlugin'; 

表示未找到模块。所以我试着:

import * as injectTapEventPlugin from '../node_modules/react-tap-event-plugin/src/injectTapEventPlugin.js';

这表示模块解析为非模块实体,不能使用此构造导入。然后我试着:

import injectTapEventPlugin = require('../node_modules/react-tap-event-plugin/src/injectTapEventPlugin.js');

由于./scripts/index.tsx中的错误而崩溃:模块生成失败:TypeError:无法读取node_modules/typescript/lib/typescript中未定义的属性“kind”。js:39567

我的tsconfig:

{
  "compilerOptions": {
  "target": "ES5",
  "removeComments": true,
  "jsx": "react",
  "module": "commonjs",
  "sourceMap": true,
  "allowJs": true
  },
  "exclude": [
    "node_modules"
  ]
}

我将webpack与TS-Loader一起使用:

 {
   test: /\.tsx?$/,
   exclude: ['node_modules', 'tests'],
   loader: 'ts-loader'
 }

共有1个答案

颜啸
2023-03-14

新的--allowJS特性并不意味着将为您生成类型,因此您不能

import {SomeModule} from 'something';

其中“something”是一个普通的JS文件--您必须使用普通的JS语法导入它,例如。

var someModule = require('something');

如果没有用于导入的.d.ts文件,则无法使用任何类型注释,例如。

let x: someModule

将无效。如果您想要为导入提供类型注释、智能感知和任何其他TypeScript功能,则必须为其提供一个.d.ts文件,或者为所需的位创建自己的接口。

阅读文档可以发现,这个特性主要是为将.js转换为.ts的用户提供的,这样他们就可以递增地重写他们的.js文件。此外,它还用于将外部文件与自己的代码捆绑在一起,从而节省了使用webpack或Browserify等工具捆绑/连接文件的时间。

 类似资料:
  • 问题内容: 我有一个Ionic应用程序,我想将节点模块angular-base64包含在我的控制器中,甚至包装在angular服务中,等等。 哪个安装了包含文件的文件夹。因此,文件的完整路径为。 但是,当我尝试像这样在我的一个控制器中使用该模块时: 我不知道我在说什么。我是否需要做其他事情才能使它起作用?也许我的东西? 问题答案: 接受的答案对于 Ionic V2 不再正确,并且已从默认安装中删除

  • 在我简单的gradle构建中,我想使用暗影罐和ProGuard一起。我发现了一些例子,其中shadowJar任务的输出是proguard任务的输入,这很好地工作,但是在我的例子中,我希望首先创建一个小的模糊jar,首先我很好地指定库依赖关系,让proguard只关注我的代码,然后我想把它传递给shadowJar插件进行fatjar打包。 我的问题是shadowJar输出包含所有未混淆的库(fine

  • 我查看了其他项目,如babel或react-router,其中模块被拆分为几个包,使用lerna和yarn包。所以我尝试用不同的包来构建lerna库: 我希望中的文件仅在需要时并且仅在安装了node-module时才能从中调用中的方法。但我一直没有找到解决办法。使用/和/是否可以实现这一点?还是我采取了错误的方法? 更新10月27日 因此,经过几次测试,我能够使用带有普通HTML/JS(https

  • 有一个简单的汇总配置,像这样。 我想用rollup来构建node_模块并将它们放入捆绑包,但我得到了一个错误,jsx出现了一个错误,似乎它无法处理jsx语法,但是如果我不在babel插件中包含node_模块,它就可以正常工作。那么,使用rollup构建节点_模块的正确方法是什么?

  • 在尝试在其他地方发布的建议后,我发现自己无法运行使用非类型化 NPM 模块的打字稿项目。下面是一个最小示例和我尝试过的步骤。 对于这个最小的例子,我们将假设 没有现有的类型定义。因此,我们将忽略包 ,并尝试手动将其类型文件 添加到我们的项目中。 文件夹结构 < li >节点模块 < ul > < li>lodash < li>foo.ts 自定义 洛达什.d.ts 接下来是文件。 文件 文件直接从

  • 我有如下代码: 我如何设置标题?我需要用户代理、内容类型,可能还有其他一些东西在标题中: 我尝试了多种方法,但我可以发送标题或表单数据,但未能同时发送这两种数据。