Почему Typescript добавляет .default () в конструктор класса в передаваемом коде? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть этот код в TS для создания экземпляра промежуточного программного обеспечения ConnectRoles в Express:

let user = new ConnectRoles (config);

это то, что промежуточное программное обеспечение ожидает в состоянииinitialize, простой вызов конструктора, однако после переноса результирующий код javascript выглядит следующим образом:

let user = new connect_roles_1.default (config);

Я импортирую этот класс вTS использует:

импорт ConnectRoles из «connect-role»;

, что означает:

const connect_roles_1 = require ("connect-role");

в JS, возможно ли то, что способ, которым я создаю / импортирую класс, может быть проблемой здесь?Я могу вручную удалить метод «по умолчанию», который вызывает ошибки в коде в JS, но это сводит на нет цель использования транспилятора, особенно если такие вещи начинают происходить чаще.

Еще одна вещь,это мой tsconfig.json:

{
  "compilerOptions": {
      "baseUrl": ".",
      "paths": { "*": ["types/*"] },
      "target": "es2015",
      "module": "commonjs",
      "moduleResolution": "node",
      "isolatedModules": false,
      "jsx": "react",
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true,
      "declaration": false,
      "noImplicitAny": false,
      "noImplicitUseStrict": false,
      "removeComments": true,
      "noLib": false,
      "preserveConstEnums": true,
      "suppressImplicitAnyIndexErrors": true,
      "outDir": "app",
      "sourceMap": true,
      "watch": true
  },
  "exclude": [
      "node_modules",
      "typings/browser",
      "typings/browser.d.ts",
  ],
  "compileOnSave": true,
  "buildOnSave": true,
  "atom": {
      "rewriteTsconfig": false
  }
}

Любые идеи будут высоко оценены, спасибо!

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Вы должны думать о файлах машинописи как о модулях, которые экспортируют объекты.


import {x, y, z} from "module" - это способ доступа к этим экспортам.

Когда вы используете import x from "module", вы на самом деле просто импортируете default из модуля.

import x from "module" это просто псевдоним для import {default as x} from "module"

module сам по себе не один экспорт. Вот почему вы также можете импортировать другой экспорт:

import default, {x, y, z} from "module"


module.ts

export const x = /*...*/;
export const y = /*...*/;
export const z = /*...*/;
export const default = /*...*/;

В прошлом вы могли экспортировать одно значение по умолчанию следующим образом:

module.exports = /*...*/;

Однако, теперь вы должны думать об экспорте строго по форме:

{
   exportName: /*...*/,
   default: /*...*/
}

Многие модули все еще используют старое соглашение для экспорта по умолчанию: module.exports = /*...*/;

В этом случае вы можете импортировать их, используя import * as x from "module";

1 голос
/ 13 мая 2019

Как говорит Тобик, import ConnectRoles from "connect-roles" пытается импортировать экспорт по умолчанию. Модуль, который вы пытаетесь импортировать, не использует экспорт по умолчанию; вместо этого он использует module.exports = ConnectRoles.

Вот три различных стиля импорта и полученные результаты:

import ConnectRolesImport from 'connect-roles';
const connectRolesImport = new ConnectRolesImport(); // error!

import * as ConnectRolesImportAll from 'connect-roles';
const connectRolesImportAll = new ConnectRolesImportAll();

import ConnectRolesRequire = require('connect-roles');
const connectRolesRequire = new ConnectRolesRequire();

Скомпилированный результат:

var connect_roles_1 = require("connect-roles");
var connectRolesImport = new connect_roles_1["default"]();

var ConnectRolesImportAll = require("connect-roles");
var connectRolesImportAll = new ConnectRolesImportAll();

var ConnectRolesRequire = require("connect-roles");
var connectRolesRequire = new ConnectRolesRequire();

Вот один из членов команды TypeScript , говорящий о разнице между синтаксисом import xxx as... и import xxx = require.... Комментарии к этому и этому ответу помогут вам выбрать, какой из них использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...