適用於 Typescript 的代碼整潔之道。 受到 clean-code-javascript 的啓發。javascript
軟件工程原理,源自 Robert C. Martin's 的書 Clean Code, 適用於 TypeScript。 這不是風格指南,它是在 TypeScript 中生成 可讀,可重用和可重構 軟件的指南。java
並不是每一個原則都必須嚴格遵照,廣泛認同的甚至更少。這些只是準則,僅此而已,但他們倒是 Clean Code 一書的做者根據自身多年的編程體會而提煉撰寫出來的。git
咱們的軟件工程技術只有50多年的歷史,咱們還有不少東西須要學習。當軟件架構與架構自己同樣古老時,也許那時咱們會有更難遵循的規則。如今,讓這些指導方針做爲一個試金石,用來評估您和您的團隊所生成的 Typescript 代碼的質量.github
除此以外:知道這些並不會當即使你成爲一個更好的軟件開發者,這些規則伴隨你工做多年後並不意味着你就不會犯錯誤了。每一段代碼都是做爲初稿開始的,就像溼粘土被塑形成最終形狀同樣。最終,當咱們與小夥伴們一塊兒審查時,咱們會鑿掉不完美之處。不要由於這些須要改進的初稿而阻礙本身技術的提高。先幹掉代碼吧!編程
⬆ 返回頂部架構
以這樣的方式區分名稱,以便讀者知道他們的差別究竟是什麼。函數
反例:工具
function between<T>(a1: T, a2: T, a3: T): boolean {
return a2 <= a1 && a1 <= a3;
}
複製代碼
正例:學習
function between<T>(value: T, left: T, right: T): boolean {
return left <= value && value <= right;
}
複製代碼
⬆ 返回頂部ui
若是你不能拼讀他,你只能像個白癡同樣去聲明它。
反例:
type DtaRcrd102 = {
genymdhms: Date;
modymdhms: Date;
pszqint: number;
}
複製代碼
正例:
type Customer = {
generationTimestamp: Date;
modificationTimestamp: Date;
recordId: number;
}
複製代碼
反例:
function getUserInfo(): User;
function getUserDetails(): User;
function getUserData(): User;
複製代碼
正例:
function getUser(): User;
複製代碼
咱們閱讀的代碼每每比咱們要寫的代碼多。所以咱們編寫的代碼的可讀性和可搜索性是很是重要的。不給那些具備意義且有助於理解程序的變量命名,就會傷害了閱讀代碼的人。讓您的名字可搜索。像 TSLint 這樣的工具能夠幫助識別未命名的常量。
反例:
// 86400000 究竟是什麼?
setTimeout(restart, 86400000);
複製代碼
正例:
// 將它們聲明爲大寫的命名常量。
const MILLISECONDS_IN_A_DAY = 24 * 60 * 60 * 1000;
setTimeout(restart, MILLISECONDS_IN_A_DAY);
複製代碼
反例:
declare const users: Map<string, User>;
for (const keyValue of users) {
// 迭代用戶地圖
}
複製代碼
正例:
declare const users: Map<string, User>;
for (const [id, user] of users) {
// 迭代用戶地圖
}
複製代碼
顯式優於隱式。
清晰是王道。
反例:
const u = getUser();
const s = getSubscription();
const t = charge(u, s);
複製代碼
正例:
const user = getUser();
const subscription = getSubscription();
const transaction = charge(user, subscription);
複製代碼
若是你的 類/類型/對象 名稱中已經有說明,不要在你的變量中重複它們。
反例:
type Car = {
carMake: string;
carModel: string;
carColor: string;
}
function print(car: Car): void {
console.log(`${car.carMake} ${car.carModel} (${car.carColor})`);
}
複製代碼
正例:
type Car = {
make: string;
model: string;
color: string;
}
function print(car: Car): void {
console.log(`${car.make} ${car.model} (${car.color})`);
}
複製代碼
默認參數一般比短路表達式更清晰。
反例:
function loadPages(count?: number) {
const loadCount = count !== undefined ? count : 10;
// ...
}
複製代碼
正例:
function loadPages(count: number = 10) {
// ...
}
複製代碼