繁体   English   中英

如何在 Typescript 中为解构变量分配类型? [复制]

[英]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[]}) => {
}

:右边的所有内容都是参数的类型。 不幸的是,这可能会变得非常冗长和重复。

请注意,您也必须在初始代码中执行此操作 - 您的示例函数接受字符串类型单个参数并尝试对其进行解构。 这将无法编译,字符串没有名为pathhistory属性(它确实有一个名为match的方法,因此可以使用,但可能不是您想要的)

在打字稿中,最好使用以下语法:

const Auth = ({ history:object, match:string, path :string}) =>
  { // function contents
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM