我正在處理一個 TypeScript 專案,我需要創建一個服務函式。所以我用這種格式創建:
interface UserService {
name: string;
age: number;
complement: string;
}
const userService = ({ name, age, complement }: UserService) => {
// CODE
};
考慮 TypeScript 中的最佳實踐,使用第二種格式是否可以,或者我是否需要鍵入我將作為第一種格式傳遞給的物件?
第一種格式:
const user: UserService = {
name: '',
age: 0,
complement: ''
}
第二種格式:
const user = {
name: '',
age: 0,
complement: ''
}
在我的控制器中,我這樣呼叫函式:
userService(user);
uj5u.com熱心網友回復:
您應該始終使用第一種格式的一系列原因:
檔案;下一個閱讀代碼的人(包括你,在未來)可以準確地看到你期望的那個物件是什么。
您的 IDE 可以幫助您自動完成屬性名稱,因為它還可以準確地看到您期望該物件是什么,因此它知道它應該具有哪些屬性。
您會得到多余的屬性檢查,因此您不會在
UserService.這可能有利于避免事故,但如果您以后更改
UserService、重命名或洗掉某些屬性也有幫助,那么編譯器可以引導您直接找到需要更改的物件(而不是使用它們的函式呼叫) .當編譯器知道物件在定義時而不是使用時應該是什么型別時,您會得到更清晰的錯誤訊息,更接近錯誤。
比較從以下方面找出問題的難度:
Argument of type '{ name: string; age: number; compliment: string; }' is not assignable to parameter of type 'UserService'. Property 'complement' is missing in type '{ name: string; age: number; compliment: string; }' but required in type 'UserService'.(2345)比來自:
Type '{ name: string; age: number; compliment: string; }' is not assignable to type 'UserService'. Object literal may only specify known properties, but 'compliment' does not exist in type 'UserService'. Did you mean to write 'complement'?(2322)是的,你確實是想寫
complement!
操場
雖然坦率地說,如果您只在呼叫服務時使用該值,如果您行內物件創建,您將獲得所有相同的好處而無需撰寫:: UserService
userService({
name: '',
age: 0,
complement: ''
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477940.html
標籤:打字稿
上一篇:SolidJS中的條件樣式
下一篇:僅為類的子類鍵入
