Typescript: модули с функциями, интерпретируемыми как обещания - PullRequest
0 голосов
/ 05 марта 2020

Я использую модуль npm, называемый clear, для написания приложения CLI.

Модуль clear очень прост:

module.exports = function clear(opts) {
    if (typeof (opts) === 'boolean') {
      opts = { fullClear: opts }
    }

    process.stdout.write('\x1b[0f');
};

Так что это действительно простой модуль. Однако, когда я вызываю функцию в своем коде, например:

const clear = import('clear')

clear()

, я получаю следующее сообщение об ошибке:

Это выражение не вызывается. Тип 'Promise <(opts ?: ClearOptions) => void>' не имеет вызова signatures.ts (2349)

То же самое верно для любого другого модуля, который экспортирует функции.

Мой tsconfig выглядит следующим образом:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "resolveJsonModule": true,
    "typeRoots": ["./typings", "node_modules/@types"]
  },
  "include": ["./**/*.ts"],
  "exclude": ["node_modules", ".vscode", "./typings"]
}

Я ошибаюсь?


Обновление:

Если я изменяю импорт оператор const clear = require('clear') тогда он отлично работает!

1 Ответ

2 голосов
/ 05 марта 2020

Функция import возвращает обещание , поскольку его выполнение отложено. Он используется для динамического c импорта (например, когда вы хотите условно импортировать модуль на основе некоторого условия или когда у вас есть круговая зависимость между двумя или более модулями).

Кажется, что вы на самом деле хочу это import оператор :

import clear from 'clear';
...