我想在我的 React 功能組件(即無類)TypeScript 專案中為一個 Enum 型別添加函式。
正如已經在這里詢問和回答的那樣,這可以通過兩種方式之一來完成:
class ModeUtil {
public static toString(mode: Mode){
return Mode【mode】。
}
或者
enum Mode {
X,
Y
}
命名空間 Mode {
export function toString(mode: Mode) : string {
return Mode[mode] 。
}
export function parse(mode: string)。Mode {
return Mode【mode】。
}
}
由于到目前為止我已經能夠在我的專案中避免使用類,我更愿意保持這種方式,因此我贊成命名空間的方法。
然而,命名空間方法違反了no-namespace ESLint 規則。
因此,使用類畢竟是一種有效的方法嗎?我的意思是,在 React 中,為了避免突變,引入了功能組件以支持類。
uj5u.com熱心網友回復:
我不認為React選擇遠離類是意味著 "一般來說,類是不好的,應該避免"。 它只是意味著 "在React中,一個組件可以用一個函陣列件來更好地表達和定義"
。所以回答你的問題:一般來說,類是一種有效的方法。 但這取決于你是否了解它是否適合你的情況。 在你的具體案例中,我認為它可以順利地作業。或者,如果你不這么認為,你可以禁用eslint的規則。
但是,再次強調,React解雇了基于類的組件,這并不意味著類是壞的。只要使用React的功能組件,并且在你認為類有幫助的時候可以自由使用。
uj5u.com熱心網友回復:
因此,我最終采用了第三種無類的方法,將列舉函式包裹在一個物件中。
考慮到你有一個像這樣的飲料列舉:
export enum Drink {
GinTonic,
LongIslandIceTea.
}
然后你可以像這樣定義你的實用/輔助函式:
import { Drink } from "./models/drink"。
const toHumanString = (drink: Drink)。) string => {
switch (飲料) {
case Drink.GinTonic。
return "Gin Tonic"。
case Drink.LongIslandIceTea。
return "長島冰茶"。
default:
throw new Error(`Unknown drink ${drink}.`)。
}
};
const toMachineString=(drink: Drink)=> {
switch (drink) {
case Drink.GinTonic。
return "GinTonic"。
case Drink.LongIslandIceTea。
return "LongIslandIceTea"。
default:
throw new Error(`Unknown drink ${drink}.`)。
}
};
const parse = (drinkAsString: string)。Drink => {
switch (drinkAsString) {
case "GinTonic"/span>:
return Drink.GinTonic。
case "LongIslandIceTea" :
return Drink.LongIslandIceTea。
default:
throw new Error(`Failed to parse drink ${drinkAsString}.`) 。
}
};
export const DrinkUtils = {
parse: parse,
toHumanString: toHumanString,
toMachineString: toMachineString
};
我添加了一個演示這里。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324504.html
標籤:
