将类型断言与解构赋值结合使用的最佳方式是什么?

What's the best way to use a type assertion with destructuring assignment?

我有一些使用 destructuring assignment 的代码如下:

const { values: project, setValues, submitForm } = useFormikContext();

根据 TypeScript type assertion documentation 我想使用 as 关键字来告诉 TS 编译器 project 将始终是类型 Project.

正确的语法是什么?我试过:

const { values: (project as Project), setValues, submitForm } = useFormikContext();

但这是无效的。

您可以使用以下语法来解决这个问题:

const { values: project, setValues, submitForm }: { values: Project; setValues: SomeType1, submitForm: SomeType2} = useFormikContext();

您也可以创建另一个变量:

const { values: project, setValues, submitForm } = useFormikContext();
const a: Project = project;

来自 looking at the implementation the definition uses TypeScript Generics

export function useFormikContext<Values>() {
  const formik = React.useContext<FormikContextType<Values>>(FormikContext);

  return formik;
}

它会创建一个 react context,如果您将钩子调用为:

useFormikContext<Project>()

可能不仅值是Project类型,而且setValues也只接受Project类型的对象(不幸的是没用过图书馆)