Подтвердить что ты не робот

Как включить нетипизированные модули node с Typescript 1.8?

Typescript 1.8 теперь поддерживает нетипизированные JS файлы. Чтобы включить эту функцию, просто добавьте флаг компилятора --allowJs или добавьте "allowJs": true для compilerOptions в tsconfig.json

через 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';

Это говорит о том, что модуль разрешает немодульный объект и не может быть импортирован с использованием этой конструкции. И затем я попробовал:

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 undefined на node_modules/typescript/lib/typescript.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'
 }
4b9b3361

Ответ 1

Новая функция --allowJs не означает, что для вас будут созданы типизации, поэтому вы не можете делать

import {SomeModule} from 'something';

где "что-то" - простой JS файл - вам нужно импортировать его, используя простой синтаксис JS, например

var someModule = require('something');

Если у вас нет файла .d.ts для импорта, вы не сможете использовать аннотации любого типа, например.

let x: someModule

будет недействительным. Если вам нужны аннотации типа, intellisense и любые другие функции TypeScript для импорта, вам придется придумать файл .d.ts для него или создать свои собственные интерфейсы для необходимых вам битов.

Чтение документации, похоже, эта функция предназначена, главным образом, для людей, переходящих из .js в .ts, чтобы они могли постепенно переписывать свои .js файлы. Кроме того, он использовался для объединения ваших внешних с вашим собственным кодом и сэкономит вам возможность связывать/объединять файлы с помощью инструмента, такого как webpack или браузера.