类型 'string' 不能分配给具有"抑制隐式任何索引错误 = false"的类型 'undefined'



最近我将TSConfig属性suppressImplicitAnyIndexErrors从true切换到false,以迫使我编写更好的代码,但我遇到了这个问题,这是唯一一个我无法修复的问题。

这是一个简单的形式,有一个复选框和一个文本输入,将添加一个truefilters,如果复选框被选中或删除属性,如果它存在的情况下,它是false。如果有任何文本,也会添加搜索字符串,如果没有,则会像checkbox属性一样删除。

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 playground来告诉你错误。

filterUsers的问题是filterNamevalue在任何方面都不相关,因此例如filterUsers('searchText', true)将是一个有效的调用。这也是为什么你不能让类型在主体中工作。

你可以通过使函数泛型来修复它:

function filterUsers<K extends keyof UserFilters>(
  filterName: K,
  value: UserFilters[K],
) {
  if (value) filters[filterName] = value
  else delete filters[filterName]
}

打印稿操场

最新更新