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.