12

Typescript 1.8 现在支持无类型的 JS 文件。要启用此功能,只需在 tsconfig.json 中的 compilerOptions 中添加编译器标志 --allowJs 或添加 "allowJs": true

通过https://blogs.msdn.microsoft.com/typescript/2016/01/28/announcing-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';

这表示 Module 解析为非模块实体,并且无法使用此构造导入。然后我尝试了:

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

它崩溃ERROR in ./scripts/index.tsx Module build failed: TypeError: Cannot read property 'kind' of undefinednode_modules/typescript/lib/typescript.js:39567

我的 tsconfig:

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

我正在使用带有 ts-loader 的 webpack:

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

1 回答 1

5

新的 --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 之类的工具捆绑/连接文件。

于 2016-02-07T14:05:07.887 回答