如果我想为传递给函数的每个重构参数分配不同类型,而不是统一类型,那么格式应该是什么?
例如,如果我希望所有三个变量都为字符串,则将采用以下格式:
const Auth = ({ history, match, path }: string) => {
//content
}
但是,如果我希望第一个成为对象,第二个为字符串,第三个为数组呢?
答案 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[]}) => {
}
:
右边的所有内容都是参数的类型。不幸的是,这可能变得非常冗长和重复。
请注意,您也必须在初始代码中执行此操作-您的示例函数接受字符串类型的单个参数,并尝试对其进行解构。这不会编译,字符串没有名为path
和history
的属性(它确实有一个名为match
的方法,这样一个方法可以工作,但可能不是您想要的)< / p>
答案 2 :(得分:-3)
在打字稿中,最好使用以下语法:
const Auth = ({ history:object, match:string, path :string}) =>
{ // function contents
}