Как импортировать рекурсивный-readdir в typescript

#node.js #typescript

#node.js #typescript

Вопрос:

Я немного борюсь с импортом и использованием модуля npm recursive-readdir в программе typescript.

После npm install recursive-readdir @types/recursive-readdir (@types/recursive-readdir@2.2.0 , recursive-readdir@2.2.2 ) работает следующий фрагмент:

 import * as RecursiveReaddir from 'recursive-readdir';

async function test () {
    const files = await RecursiveReaddir.default('/tmp');
    ...
}
 

Файл node_modules/@types/recursive-readdir/index.d.ts содержит:

 ...
import * as fs from "fs";
declare namespace RecursiveReaddir {
    type IgnoreFunction = (file: string, stats: fs.Stats) => boolean;
    type Ignores = ReadonlyArray<string|IgnoreFunction>;
    type Callback = (error: Error, files: string[]) => void;
    interface readDir {
        (path: string, ignores?: Ignores): Promise<string[]>;
        (path: string, callback: Callback): void;
        (path: string, ignores: Ignores, callback: Callback): void;
    }
}

declare var recursiveReadDir: RecursiveReaddir.readDir;
export = recursiveReadDir;
 

Мои вопросы:

  1. Откуда берется функция RecursiveReaddir.default(...) ?
  2. Возможен ли более понятный и интуитивно понятный импорт и использование?
    В примере ìmport { readDir } from 'recursive-readdir'; или что-то в этом роде?

Тестовая программа доступна в:
https://github.com/ManfredSteiner/stackovf_65391266

Ответ №1:

Я получил ошибку в вашем коде. (node:7541) UnhandledPromiseRejectionWarning: TypeError: RecursiveReaddir.default is not a function

Итак, я реализовал его для работы, обратившись к существующим тестовым кодам. Смотрите ниже

test.ts

 // ./test.ts
import recursive from 'recursive-readdir';

async function test () {
    const files = await recursive(__dirname);
    console.log(files);
}

test()
 

команды

 # node v12.13.1
# npm v6.11.3
npm install @types/recursive-readdir amp;amp; 
npm install recursive-readdir

  @types/recursive-readdir@2.2.0
  recursive-readdir@2.2.2

tsc amp;amp; node ./build/test.js
 

Результаты

 # Success
[ '/Users/kmk/Project/src/github.com/myeongkil/tmp/stackoverflow/recursive-readdir/build/test.js' ]
 

Комментарии:

1. Я снова пытаюсь создать фрагмент с нуля. RecursiveReaddir.default() переносится и работает, но я заменяю __dirname на /tmp . Я также вижу, что ваше «решение» import recursive from 'recursive-readdir'; работает. Но почему? Я не могу видеть recursive в файле index.d.ts . Оба решения остаются для меня странными.

2. Я добавляю репозиторий тестовой программы, см. https://github.com/ManfredSteiner/stackovf_65391266