为什么typescript-eslint在调用delete和update方法时显示“Unsafe call of an any typed value”

watbbzwu  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(226)
type TResultCategory<T> = {
  title: string;
  items: T[];
  description?: string;
  delete(dispatch: Dispatch<{}>): void;
  update?(dispatch: Dispatch<{}>, products: TCartProduct[]): void;
}

type TResult = (TResultCategory<TResultProductQueue> | TResultCategory<TCartProduct>)[]

// ...
const [
      unavailableCategoriesQueue,
      updateUnavailableCategoriesQueue
    ] = useState<TResult>([]),

const onContinue = (): void => {
  unavailableCategoriesQueue[0].delete(dispatch); // <= error 
  unavailableCategoriesQueue.slice(1).forEach((category) => {
    category?.update(dispatch, unavailableCategoriesQueue[0]?.items); // <= error
  });
};
//...

字符串
UnavailableCategoriesQueue是一个数组,它可以有类型TResultCategory和TResultCategory,这两种类型都有一个delete方法。

eoigrqb6

eoigrqb61#

TResult的结果是一个数组。你把这个数组分解成两个const unavailableCategoriesQueueunavailableCategoriesQueue。这些const现在包含TResultCategory<TResultProductQueue> | TResultCategory<TCartProduct>。但不是数组!
unavailableCategoriesQueue[0]现在访问这个对象中带有键0的属性,它将any作为类型。any.delete也将anyany.delete() => any.any()是错误消息中的“unsafe call”。
不知道你想做什么,但至少把unavailableCategoriesQueue当作它本身的对象,而不是一个数组。

相关问题