Если вы go в исходный код модуля fs для класса DirEnt
, вы обнаружите следующее:
class Dirent {
constructor(name, type) {
this.name = name;
this[kType] = type;
}
isDirectory() {
return this[kType] === UV_DIRENT_DIR;
}
isFile() {
return this[kType] === UV_DIRENT_FILE;
}
isBlockDevice() {
return this[kType] === UV_DIRENT_BLOCK;
}
isCharacterDevice() {
return this[kType] === UV_DIRENT_CHAR;
}
isSymbolicLink() {
return this[kType] === UV_DIRENT_LINK;
}
isFIFO() {
return this[kType] === UV_DIRENT_FIFO;
}
isSocket() {
return this[kType] === UV_DIRENT_SOCKET;
}
}
Если вы затем поищете kType
, вы найдите это:
const kType = Symbol('type');
И все значения в этом коде, такие как UV_DIRECT_DIR
и UV_DIRENT_FILE
, являются константами, импортированными из libuv, которые описывают тип записи в каталоге.
Итак, похоже, что свойство, о котором вы спрашиваете, содержит тип libuv для записи каталога, и они используют символ в качестве имени свойства, потому что они не предполагают, что эта внутренняя деталь реализации будет использоваться публично или документироваться.
Если вы не знаете, что такое libuv, это кроссплатформенная библиотека, которую nodejs использует для доступа к службам ОС. Он абстрагирует некоторые детали операционной системы в общем интерфейсе, чтобы можно было написать больше nodejs кода один раз и работать на нескольких платформах (Win / Mac / Unix).
Упомянутые выше базовые UV-константы определены здесь в коде C ++ в libuv в uv.h
.
typedef enum {
UV_DIRENT_UNKNOWN,
UV_DIRENT_FILE,
UV_DIRENT_DIR,
UV_DIRENT_LINK,
UV_DIRENT_FIFO,
UV_DIRENT_SOCKET,
UV_DIRENT_CHAR,
UV_DIRENT_BLOCK
} uv_dirent_type_t;