Bästa praxis för villkorslogik i TypeScript
Denna artikel förklarar bästa praxis för villkorslogik i TypeScript.
YouTube Video
Bästa praxis för villkorslogik i TypeScript
Begränsa typer med typvakter
Genom att använda TypeScripts typsystem och använda typvakter inom if
-satser kan du förbättra typsäkerheten och läsbarheten.
1function processInput(input: string | number) {
2 if (typeof input === "string") {
3 console.log(`String input: ${input.toUpperCase()}`);
4 } else {
5 console.log(`Number input: ${input.toFixed(2)}`);
6 }
7}
Genom att använda typeof
och andra typvakter säkerställer du att koden inom varje block är typsäker och kontextuellt relevant.
Undvik nästlade if
-satser
Djupet av nästlade if
-satser minskar kodens läsbarhet och underhållbarhet. Använd istället tidiga returvärden, logiska operatorer eller externa funktioner.
Dåligt exempel:
1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2 if (user.age) {
3 if (user.age > 18) {
4 if (user.isAdmin) {
5 console.log("User is an adult admin.");
6 }
7 }
8 }
9}
Förbättrat exempel:
1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2 if (!user.age || user.age <= 18 || !user.isAdmin) {
3 return;
4 }
5 console.log("User is an adult admin.");
6}
Denna metod plattar till koden och gör logiken mer begriplig.
Utnyttja valfri kedjning
När du kontrollerar nästlade egenskaper, använd valfri kedjning (?.
) för att undvika onödiga if
-villkor.
Utan valfri kedjning:
1if (user && user.profile && user.profile.email) {
2 console.log(user.profile.email);
3}
Med valfri kedjning:
1if (user?.profile?.email) {
2 console.log(user.profile.email);
3}
Detta minskar boilerplate-kod och förbättrar läsbarheten. Här avser boilerplate-kod repetitiv, standardiserad kod som ofta krävs för att utföra specifika uppgifter i programmering.
Använd strikta likhetsoperatorer
TypeScript stöder strikt typning, och användning av strikt likhet (===
) eller strikt olikhet (!==
) hjälper till att förhindra oväntad type coercion.
Dåligt exempel:
1if (value == "123") {
2 console.log("Value is 123.");
3}
Förbättrat exempel:
1if (value === "123") {
2 console.log("Value is 123.");
3}
Använd enums eller bokstavstyper för explicita villkor
Användning av enums eller bokstavstyper klargör villkor och minskar risken för fel.
1type Status = "success" | "error" | "loading";
2
3function displayMessage(status: Status) {
4 if (status === "success") {
5 console.log("Operation succeeded.");
6 } else if (status === "error") {
7 console.log("Operation failed.");
8 } else {
9 console.log("Loading...");
10 }
11}
Genom att definiera förväntade värden kan TypeScript upptäcka typer och säkerställa noggrannhet.
Kombinera liknande villkor
När flera villkor delar samma logik, konsolidera dem med logiska operatorer eller ett switch-uttalande.
Dåligt exempel:
1if (role === "admin") {
2 grantAccess();
3}
4if (role === "superadmin") {
5 grantAccess();
6}
Förbättrat exempel:
1if (role === "admin" || role === "superadmin") {
2 grantAccess();
3}
Alternativt, använd ett switch-uttalande för att hantera flera tydliga grenar:
1switch (role) {
2 case "admin":
3 case "superadmin":
4 grantAccess();
5 break;
6 case "user":
7 console.log("Limited access.");
8 break;
9 default:
10 console.log("No access.");
11}
Undvik att göra villkorsuttryck komplexa
Komplexa villkorsuttryck i if-satser minskar läsbarheten. Extrahera dem till meningsfulla variabler eller funktioner.
Dåligt exempel:
1if (user.age > 18 && user.isAdmin && user.permissions.includes("write")) {
2 console.log("User can write.");
3}
Förbättrat exempel:
1const isAdultAdminWithWriteAccess =
2 user.age > 18 && user.isAdmin && user.permissions.includes("write");
3
4if (isAdultAdminWithWriteAccess) {
5 console.log("User can write.");
6}
Att namnge villkoren förbättrar tydligheten och gör koden självförklarande.
Använd ternära operatorer för enkla villkor
För enkla villkor gör ternära operatorer koden kortfattad.
Exempel:
1const message = isLoggedIn ? "Welcome back!" : "Please log in.";
2console.log(message);
Undvik dock att använda ternära operatorer för komplexa villkor eftersom det minskar läsbarheten.
Ersätt villkorsgrenar med arrayer eller mappar
När villkoret endast är en värdetilldelning kan användning av arrayer eller mappar förbättra kodens läsbarhet och underhållbarhet jämfört med switch
-satser eller komplexa if-else
-block. I TypeScript kan du använda typinformation för att implementera det på ett säkrare sätt.
Dåligt exempel:
1function getDayName(day: number): string {
2 switch (day) {
3 case 0:
4 return "Sunday";
5 case 1:
6 return "Monday";
7 case 2:
8 return "Tuesday";
9 case 3:
10 return "Wednesday";
11 case 4:
12 return "Thursday";
13 case 5:
14 return "Friday";
15 case 6:
16 return "Saturday";
17 default:
18 return "Invalid day";
19 }
20}
Förbättrat exempel: Använda en array
1function getDayName(day: number): string {
2 const days = [
3 "Sunday",
4 "Monday",
5 "Tuesday",
6 "Wednesday",
7 "Thursday",
8 "Friday",
9 "Saturday"
10 ];
11 return days[day] ?? "Invalid day";
12}
Förbättrat exempel: Använda en mapp
1function getDayName(day: number): string {
2 const dayMap = new Map<number, string>([
3 [0, "Sunday"],
4 [1, "Monday"],
5 [2, "Tuesday"],
6 [3, "Wednesday"],
7 [4, "Thursday"],
8 [5, "Friday"],
9 [6, "Saturday"]
10 ]);
11 return dayMap.get(day) ?? "Invalid day";
12}
Slutsats
Genom att följa dessa bästa metoder kan du göra if-satser i TypeScript tydliga, effektiva och underhållbara. Genom att använda TypeScript-funktioner som typvakter, valfri kedjning och enumar kan du förbättra kodens läsbarhet och robusthet. Genom att följa bästa praxis kan du hålla villkor koncisa och tydliga, vilket resulterar i kod som är enklare att förstå och underhålla.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.