在npm package commandLineArgs中,一个字符串怎么可能被输入为Number ?

How is it possible for a string to be typed as Number in npm package commandLineArgs

本文关键字:怎么可能 字符串 一个 输入 Number commandLineArgs package npm      更新时间:2023-09-26

下面的代码来自MongoDB的课程第3周的查询操作符在Node.js Driver一章:

var MongoClient = require('mongodb').MongoClient,
  commandLineArgs = require('command-line-args'),
  assert = require('assert');
var options = commandLineOptions();
MongoClient.connect('mongodb://localhost:27017/crunchbase', function(err, db) {
  assert.equal(err, null);
  console.log("Successfully connected to MongoDB.");
  var query = queryDocument(options);
  var projection = {
    "_id": 1,
    "name": 1,
    "founded_year": 1,
    "number_of_employees": 1,
    "crunchbase_url": 1
  };
  var cursor = db.collection('companies').find(query, projection);
  var numMatches = 0;
  cursor.forEach(
    function(doc) {
      numMatches = numMatches + 1;
      console.log(doc);
    },
    function(err) {
      assert.equal(err, null);
      console.log("Our query was:" + JSON.stringify(query));
      console.log("Matching documents: " + numMatches);
      return db.close();
    }
  );
});
function queryDocument(options) {
  console.log(options);
  var query = {
    "founded_year": {
      "$gte": options.firstYear,
      "$lte": options.lastYear
    }
  };
  if ("employees" in options) {
    query.number_of_employees = {
      "$gte": options.employees
    };
  }
  return query;
}
function commandLineOptions() {
  var cli = commandLineArgs([{
    name: "firstYear",
    alias: "f",
    type: Number
  }, {
    name: "lastYear",
    alias: "l",
    type: Number
  }, {
    name: "employees",
    alias: "e",
    type: Number
  }]);
  var options = cli.parse()
  if (!(("firstYear" in options) && ("lastYear" in options))) {
    console.log(cli.getUsage({
      title: "Usage",
      description: "The first two options below are required. The rest are optional."
    }));
    process.exit();
  }
  return options;
}

我需要command-line-args包,它有一个方法commandLineArgs。一切都很好……

现在,我看到传递给该方法的对象的type被设置为Number。我们可以清楚地看到它们是String s。

这怎么可能?

command-line-args GitHub页面:

type值是一个setter函数(您从中接收输出),使您能够指定接收到的类型和值。

换句话说,传递Number作为类型允许您将参数解析为数字。