Как я могу получить тип от fs.Dirent? - PullRequest
0 голосов
/ 14 октября 2019

Я могу позвонить

fs.readdirSync("C:\\", { withFileTypes: true })

и получить массив fs.Dirent, но они выглядят как

> fs.readdirSync("C:\\", { withFileTypes: true })[32]
Dirent { name: 'Windows', [Symbol(type)]: 2 }
> fs.readdirSync("C:\\", { withFileTypes: true })[21]
Dirent { name: 'pagefile.sys', [Symbol(type)]: 1 }
> fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'Documents and Settings', [Symbol(type)]: 3 }

Так что есть имя и тип, но тип скрытпод Symbol (тип), и я не могу найти никакой информации, как получить его оттуда.

Конечно, я могу использовать хак, как

> x = fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'DoYourData iCloud Backup', [Symbol(type)]: 2 }
> x[Object.getOwnPropertySymbols(x)[0]]
3

Но это кажется странным.

Если он скрыт для цели, и нет ничего открытого, кроме имени, я не понимаю, почему у нас есть специальный флаг для получения объекта вместо простой строки.

screenshot

1 Ответ

0 голосов
/ 14 октября 2019

Существуют методы проверки объекта для специальных целей. В документации они перечислены сразу после Класс Директы .

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

var methods = ['isBlockDevice', 'isCharacterDevice', 'isDirectory', 'isFIFO', 'isFile', 'isSocket', 'isSymbolicLink'];

var res = fs.readdirSync("C:\\", { withFileTypes: true }).map(d => {
  var cur = { name: d.name }
  for (var method of methods) cur[method] = d[method]()
  return cur
})

console.table(res)

screenshot

...