TypeScript 中的 noImplicitAny 解釋


TypeScript 是 JavaScript 的一個流行的型別化超集,可以編譯成純 JavaScript。它提供了許多功能來改善整體開發人員體驗,例如靜態型別、介面和名稱空間。TypeScript 中的一個關鍵功能是 noImplicitAny 編譯器選項。在本文中,我們將探討 noImplicitAny、其優缺點以及在 TypeScript 程式碼中處理它的兩種不同方法。

方法 1:顯式型別註解

此方法涉及為每個變數和函式引數新增型別註解,以確保編譯器知道預期的型別。

新增型別註解

function add(a: number, b: number): number {
   return a + b;
}

在此示例中,型別註解:number 使得 a 和 b 都應該是數字,並且函式應該返回一個數字這一點變得清晰。

處理第三方庫

對於沒有型別註解的第三方庫,您可以安裝並使用相應的 @types 包或建立自己的型別宣告檔案。

方法 2:隱式型別推斷

TypeScript 的型別推斷系統通常可以在沒有顯式註解的情況下推斷出正確的型別。

TypeScript 的型別推斷

let myNumber = 5;

在此示例中,TypeScript 自動推斷 myNumber 的型別為 number,因為它被賦值為 5。

示例 1:使用顯式型別註解

在此示例中,我們使用顯式型別註解來定義 User 介面和 getUserInfo 函式。程式碼很清晰,它確保使用了正確的型別。

interface User {
   id: number;
   name: string;
   email: string;
}
function getUserInfo(user: User): string {
   return `ID: ${user.id}, Name: ${user.name}, Email: ${user.email}`;
}
const user: User = {
   id: 1,
   name: "John Doe",
   email: "john.doe@example.com",
};
console.log(getUserInfo(user));

編譯後,它將生成以下 JavaScript 程式碼:

function getUserInfo(user) {
   return "ID: ".concat(user.id, ", Name: ").concat(user.name, ", Email: ").concat(user.email);
}
var user = {
   id: 1,
   name: "John Doe",
   email: "john.doe@example.com"
};
console.log(getUserInfo(user));

輸出

以上程式碼將產生以下輸出:

ID: 1, Name: John Doe, Email: john.doe@example.com

示例 2:依賴型別推斷

在此示例中,我們依賴 TypeScript 的型別推斷來理解 users 陣列的形狀和 findUser 函式的返回型別。它使程式碼保持簡潔,同時保持型別安全。

const users = [
   {
      id: 1,
      name: "John Doe",
      email: "john.doe@example.com",
   },
   {
      id: 2,
      name: "Jane Doe",
      email: "jane.doe@example.com",
   },
];

function findUser(id: number) {
   return users.find(user => user.id === id);
}

const user = findUser(1);
console.log(user);

編譯後,它將生成以下 JavaScript 程式碼:

var users = [
   {
      id: 1,
      name: "John Doe",
      email: "john.doe@example.com"
   },
   {
      id: 2,
      name: "Jane Doe",
      email: "jane.doe@example.com"
   },
];
function findUser(id) {
   return users.find(function (user) { return user.id === id; });
}
var user = findUser(1);
console.log(user);

輸出

以上程式碼將產生以下輸出:

{ id: 1, name: 'John Doe', email: 'john.doe@example.com' }

結論

TypeScript 中的 noImplicitAny 選項可以幫助開發人員編寫更安全、更易讀的程式碼。但是,它也可能導致冗長並減慢開發速度。通過了解權衡並瞭解何時使用顯式型別註解或依賴型別推斷,您可以找到正確的平衡並建立乾淨、可維護的 TypeScript 程式碼。

更新於: 2023年4月17日

212 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.