javascript - Hur ger man endast den andra parametern till en funktion i typescript?


Säg att jag har en funktion som den här i TypeScript:

openMultipleAddFormModal(commission?: Commission, people?: People): void {
 // some data
}

Enligt min förståelse lade jag till Optional Chaining-operatorn för att göra en parameter icke nödvändig.

Hur ändrar jag min kod ovan för att ha något liknande detta?

 this.openMultipleAddFormModal(res); // where res here refers to people and NOT to commission

Kan jag göra något liknande det C# gör, där du kan ange namnet på parametern när du anropar funktionen och "binda" den till egenskapen?

Något liknande i C#:

// main method
 public void UpdateBase(string machineRef = null, string userRef = null){
 Ref = machineRef ?? Environment.MachineName;
 UserRef = userRef ?? Environment.UserName;
}
// and then i specify the parameter i am passing
 UpdateBase(userRef: userRef); // is there something like this in typescript / javascript?

Tack för all hjälp!

Svar #1

För att "hoppa över" argumentet för en valfri positionell parameter i JavaScript och TypeScript, skickar du undefined som argument för parametern:

openMultipleAddFormModal(undefined, peopleObject);

Om du verkligen gillar korthet kan du använda void 0 istället för undefined (resultatet av void-operatorn är alltid undefined), men ärligt talat påverkar det läsbarheten...

Lekplatslänk

Det har diskuterats att tillåta att argument helt enkelt hoppas över genom att skriva fn(, second), men det har aldrig nått fram till att gå vidare genom JavaScript-förslagsprocessen.

Svar #2

Det finns inga namngivna parametrar i Typescript eller Javascript. Så det enda sättet du kan uppnå detta är att skicka argumenten som ett objekt, så att båda parametrarna kan markeras som valfria.

Men du kan skicka undefined som det första argumentet om du vill, vilket fungerar som att inte skicka argumentet. Men jag personligen gillar tillvägagångssättet nedan när jag stöter på en situation som denna eftersom jag gillar ergonomin.

istället för detta,

openMultipleAddFormModal(commission?: Commission, people?: People): void {
 // some data
}

gör detta,

openMultipleAddFormModal(params: {commission?: Commission, people?: People}): void {
 // access like
console.log(params.commission)
}

Du kan till och med destrukturera direkt i funktionsdefinitionen om du vill, så här

openMultipleAddFormModal({commission, people}: {commission?: Commission, people?: People}): void {
 // access like
console.log(commission)
}

och när du anropar funktionen, gör det så här,

this.openMultipleAddFormModal({people: res})

Jag är inte expert på detta ämne, men jag tror inte att det finns några nackdelar med detta tillvägagångssätt förutom kanske några millisekunder mer tid att köra (vilket aldrig kommer att vara märkbart nog).

Relaterade artiklar