Javascript 如何在Typescript中将类型分配给解构变量?

Javascript 如何在Typescript中将类型分配给解构变量?,javascript,reactjs,typescript,typescript-typings,Javascript,Reactjs,Typescript,Typescript Typings,如果我想为传递到函数中的每个非结构化参数分配不同的类型,而不是统一的类型,那么格式应该是什么 例如,如果我希望所有三个变量都是字符串,则其格式如下: const Auth=({history,match,path}:string)=>{ //内容 } 但是,如果我希望第一个是对象,第二个是字符串,第三个是数组,那该怎么办呢?您必须完整地键入要分解的对象 const Auth = ({ history, match, path }: { history: string, match: s

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

例如,如果我希望所有三个变量都是字符串,则其格式如下:

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

但是,如果我希望第一个是对象,第二个是字符串,第三个是数组,那该怎么办呢?

您必须完整地键入要分解的对象

const Auth = ({ history, match, path }: {
  history: string,
  match: string,
  path: string
}) => {
    //content
}
然后,Typescript将查找这些属性的类型,然后正确推断正确的类型


一些变化

为正在分解的对象创建离散类型。(我对react道具经常使用这种模式):

强类型或弱类型:

const Auth = ({ history, match, path }: { [key: string]: string }) => {
    //content
}
不同键的不同类型:

const Foo = ({ a, b }: { a: string, b: number[] }) => {
    //content
}

在typescript中,最好使用以下语法:

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

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

const Auth=({match,path}:{match:string,path:string[]})=>{
}
右侧的所有内容都是参数的类型。不幸的是,这可能会变得非常冗长和重复


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

。搜索你的确切标题时,第一个结果就是这个。有时(几乎总是)搜索速度更快。这并不是你所认为的那样。这是通过重命名进行对象分解;TS编译器不会对其进行任何修改。在我评论的链接中也讨论过,但这只是标准的ES6语法。
const Auth = ({ history:object, match:string, path :string}) =>
  { // function contents
  }