如何为Typescript中的结构化变量分配类型?

时间:2019-08-07 18:38:20

标签: javascript reactjs typescript typescript-typings

如果我想为传递给函数的每个重构参数分配不同类型,而不是统一类型,那么格式应该是什么?

例如,如果我希望所有三个变量都为字符串,则将采用以下格式:

const Auth = ({ history, match, path }: string) => {
    //content
}

但是,如果我希望第一个成为对象,第二个为字符串,第三个为数组呢?

3 个答案:

答案 0 :(得分:3)

您必须完全键入要变形的对象。

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
}

答案 1 :(得分:1)

您需要声明作为Auth的参数传递的整个对象的类型,即

const Auth = ({ match, path }: {match: string, path: string[]}) => {
}

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

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

答案 2 :(得分:-3)

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

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