最近我將 TSConfig 屬性suppressImplicitAnyIndexErrors從切換true
到false
以迫使我撰寫更好的代碼,但我遇到了這個問題,這是我唯一無法解決的問題。
這是一個簡單的表單,帶有一個復選框和一個文本輸入,如果復選框被選中,它將添加一個true
到filters
,或者如果它存在則洗掉該屬性,以防它是false
。如果有任何文本,也會添加搜索字串,如果沒有,則洗掉復選框屬性。
interface UserFilters {
searchText?: string;
hasAction?: boolean;
}
const filters = {} as UserFilters;
function filterUsers(filterName: keyof UserFilters, value: string | boolean | undefined) {
if (value) filters[filterName] = value; // ERROR: Type 'string' is not assignable to type 'undefined'
else delete filters[filterName];
}
我做了這個TypeScript 游樂場來向您展示錯誤。
uj5u.com熱心網友回復:
問題filterUsers
在于filterName
并且value
沒有任何關系,因此例如filterUsers('searchText', true)
是一個有效的呼叫。這也是為什么你不能讓型別在體內起作用的原因。
您可以通過使函式通用來修復它:
function filterUsers<K extends keyof UserFilters>(
filterName: K,
value: UserFilters[K],
) {
if (value) filters[filterName] = value
else delete filters[filterName]
}
TypeScript 游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/529969.html
標籤:打字稿