[英]How to assign types to destructured variables in Typescript? [duplicate]
如果我想为传递给函数的每个解构参数分配不同的类型,而不是统一类型,格式应该是什么?
例如,如果我希望所有三个变量都是字符串,则格式如下:
const Auth = ({ history, match, path }: string) => {
//content
}
但是,如果我希望第一个是对象,第二个是字符串,第三个是数组呢?
您必须完整地键入正在解构的对象。
const Auth = ({ history, match, path }: {
history: string,
match: string,
path: string
}) => {
//content
}
然后,Typescript 将查找这些属性的类型,然后正确推断出正确的类型。
一些变化。
为被解构的对象创建一个离散类型。 (我经常将这种模式用于反应道具):
interface AuthInfo {
history: string,
match: string,
path: string
}
const Auth = ({ history, match, path }: AuthInfo) => {
//content
}
或者不那么强类型:
const Auth = ({ history, match, path }: { [key: string]: string }) => {
//content
}
不同键的不同类型:
const Foo = ({ a, b }: { a: string, b: number[] }) => {
//content
}
您需要声明整个对象的类型作为参数传递给Auth
,即
const Auth = ({ match, path }: {match: string, path: string[]}) => {
}
:
右边的所有内容都是参数的类型。 不幸的是,这可能会变得非常冗长和重复。
请注意,您也必须在初始代码中执行此操作 - 您的示例函数接受字符串类型的单个参数并尝试对其进行解构。 这将无法编译,字符串没有名为path
和history
属性(它确实有一个名为match
的方法,因此可以使用,但可能不是您想要的)
在打字稿中,最好使用以下语法:
const Auth = ({ history:object, match:string, path :string}) =>
{ // function contents
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.