具有以下原始代碼,它是一個基于值的函式toCheck正在構建一個css類:
const computeSomething = (toCheck: string) => {
return clsx('flex', {
'flex-start': toCheck === 'FIRST',
'flex-end': toCheck === 'LAST'
});
}
要求是使用enumfor toCheck,嘗試了一些東西,但可能是錯誤的:
export enum toCheck {
FIRST = 'FIRST',
LAST = 'LAST'
}
const computeSomething = (toCheck: string) => {
return clsx('flex', {
'flex-start': toCheck.FIRST,
'flex-end': toCheck.LAST
});
}
錯誤說:
“字串”型別不存在屬性“FIRST”。
有任何想法嗎?
uj5u.com熱心網友回復:
問題是toCheck由于您的引數被命名為相同的 ( toCheck: string) ,因此您沒有指代(預期的)列舉。更改任何一個的名稱應該可以解決問題:
export enum ToCheckEnum {
FIRST = 'FIRST',
LAST = 'LAST'
}
const computeSomething = (toCheck: string) => {
return clsx('flex', {
'flex-start': ToCheckEnum.FIRST,
'flex-end': ToCheckEnum.LAST
});
}
約定是 enum/type 應該有 Pascal 大小寫,所以我認為這種方式更好。
uj5u.com熱心網友回復:
為什么要傳入 toCheck 作為引數?只需這樣做:
export enum ToCheckEnum {
FIRST = 'FIRST',
LAST = 'LAST'
}
const computeSomething = (toCheck: ToCheckEnum) => {
return clsx('flex', {
'flex-start': toCheck === ToCheckEnum.FIRST,
'flex-end': toCheck === ToCheckEnum.LAST
});
}
uj5u.com熱心網友回復:
您通過為引數使用相同的名稱來隱藏列舉。為列舉和引數使用不同的名稱來避免它。列舉的慣用案例是PascalCase。
之后,只需使用擴展列舉型別的泛型,你應該沒有問題:
TS 游樂場鏈接
declare function clsx (...args: unknown[]): void;
enum ToCheck {
FIRST = 'FIRST',
LAST = 'LAST',
}
const computeSomething = <T extends typeof ToCheck>(toCheck: T) => {
return clsx('flex', {
'flex-start': toCheck.FIRST,
'flex-end': toCheck.LAST
});
}
computeSomething(ToCheck); // ok
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377268.html
標籤:javascript 反应 打字稿 枚举 反应打字稿
