Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 什么';将类型断言与分解赋值一起使用的最佳方法是什么?_Typescript_Formik_Destructuring_Type Assertion_Object Destructuring - Fatal编程技术网

Typescript 什么';将类型断言与分解赋值一起使用的最佳方法是什么?

Typescript 什么';将类型断言与分解赋值一起使用的最佳方法是什么?,typescript,formik,destructuring,type-assertion,object-destructuring,Typescript,Formik,Destructuring,Type Assertion,Object Destructuring,我有一些代码使用如下: const { values: project, setValues, submitForm } = useFormikContext(); 根据,我想使用as关键字告诉TS编译器project将始终是project类型 这个的正确语法是什么?我试过: const { values: (project as Project), setValues, submitForm } = useFormikContext(); 但这是无效的。您可以使用以下语法来处理此问题: c

我有一些代码使用如下:

const { values: project, setValues, submitForm } = useFormikContext();
根据,我想使用
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;
按定义使用

导出函数useformiccontext(){
const formik=React.useContext(FormikContext);
返回蚁群;
}
它会创建一个钩子,如果将钩子称为:

useFormikContext<Project>()
useformiccontext()

可能不仅值的类型是
Project
,而且
setValues
将只接受
Project
类型的对象(遗憾的是没有使用库)

通过查看,我认为您应该使用
useformiccontext()
而不是代替Thank@Teneff。这正是我想要的-当我在VScode中悬停在
project
上时,我可以看到
project
的类型是
project
。你能补充一下这一点作为答案,并进一步解释一下为什么会这样吗?是不是
变成了一个(类似变量的东西)来声明
值的类型?我们添加了一个简单的例子:谢谢!我更喜欢第一个例子,因为它没有额外的变量。是的,我也喜欢它。我没有检查你的库中是否有打字机。但是我认为这个例子对于其他开发者来说更常见。你是对的-如果他们写了一个答案,我会把这个标记为已接受但向上投票@Teneff。谢谢!我也会投票的。谢谢!这是我使用的答案,但我标记了另一个答案被接受,因为其他人可能正在使用不使用泛型的库。
useFormikContext<Project>()