javascript - Kör importering av endast en funktion också andra funktioner i den filen?


Jag har den här koden i filen bmiCalculator.ts:

import { isNotNumber } from './utils';

export default function calculateBmi(height: number, weight: number) {
  const bmi = weight / Math.pow(height / 100, 2);

  if (bmi < 18.5) {
    return 'Underweight';
  } else if (bmi >= 18.5 && bmi < 25) {
    return 'Normal (healthy weight)';
  } else {
    return 'Overweight';
  }
}

const parseArguments = (args: string[]) => {
  if (args.length < 4) throw new Error('Not Enough Arguments');

  if (args.length > 4) throw new Error('Too many arguments');

  if (!isNotNumber(args[2]) && !isNotNumber(args[3])) {
    return {
      height: Number(args[2]),

      weight: Number(args[3]),
    };
  } else {
    throw new Error('Arguments are not of the correct type');
  }
};

const { height, weight } = parseArguments(process.argv);

console.log(calculateBmi(height, weight));

Och även denna kod i filen index.ts:

import express from 'express';

import calculateBmi from './bmiCalculator';

const app = express();

app.get('/hello', (_req, res) => {
  res.send('Hello Full Stack!');
});

app.get('/bmi', (req, res) => {
  const height = Number(req.query.height);

  const weight = Number(req.query.weight);

  const bmi = calculateBmi(height, weight);

  res.send({ weight, height, bmi });
});

const PORT = 3002;

app.listen(PORT, () => console.log(`server running on port ${PORT}`));

Jag får följande fel när jag kör Express-serverkoden i index.ts:

Error: Not Enough Arguments

Jag importerar inte och använder parseArgument-funktionen i index.ts, så varför händer detta? Jag importerar och använder bara calculateBmi-funktionen i den filen. För tillfället kan jag bara köra koden genom att kommentera ut den icke-exporterade koden i bmiCalculator.ts.

Svar #1

Ja, så snart du importerar ett modul (här är modulen bara en fil), körs det.

Om modulen endast innehåller exporterade funktionsdeklarationer, finns det inga bieffekter.

Om modulen innehåller några uttryck på rot-nivå (som const { height, weight }=parseArguments(process.argv); i ditt fall), körs de. Särskilt bör du se att din nästa console.log skrivs ut.