TS – Defensive Function
防禦型函式 Defensive Function
一種源自於防禦性程式設計(Defensive Programming)的寫法,簡單來說就是「我不信任任何外部輸入的資料,一定會有人搞砸(例如忘記設定環境變數),所以我要在最前端築起一道防護牆。」
無防禦性寫法
function getEnv(name: string) {
return process.env[name]; // 拿了就直接丟回去,不管有沒有拿到
}Code language: JavaScript (javascript)
如果開發的人忘記在 .env 設定 DB_PASSWORD,就會因爲收到 undefined最後噴出一個 Access denied for user 'root'@'localhost' (using password: NO) 。
有防禦的寫法
function getRequiredEnv(name: string): string {
const value = process.env[name];
if (!value) {
throw new Error(`Missing required env: ${name}`); // 自定義錯誤訊息
}
return value;
}Code language: JavaScript (javascript)
如果漏掉任何一個設定,程式在啟動就會馬上告訴你:Missing required env: DB_PASSWORD。
保證回傳
參考以下程式碼:
function func(value: string): string {
return value;
}Code language: JavaScript (javascript)
爲什麼要func()右邊還要寫一個:string呢,這叫做保證回傳型別。
有在寫TS的人應該都對這個錯誤不陌生:
Argument of type ‘string | undefined’ is not assignable to parameter of type ‘string’.
如果你沒有保證回傳一定是字串,TypeScript 就會跟你說變數可能是 string 也可能是 undefined,于是拒絕編譯導致錯誤。
