Javascript Typescript:使用map时带数组的数组失败

Javascript Typescript:使用map时带数组的数组失败,javascript,typescript,Javascript,Typescript,类型“number[][]”不能分配给类型“[number,number][]” 有什么想法吗 这是因为地图是如何键入的 官方定义是: mapcallbackfn:value:T,index:number,array:T[]=>U,thisArg?:any:U[] 若不指定U,则默认U[]将与数组[]相同 问题是[number,number]是数组的一个子集,没有指定U的map将意味着返回类型将是Array 这两种类型不兼容,就会出现错误 解决方案是指定允许返回的映射: 常量okToo:点=[0

类型“number[][]”不能分配给类型“[number,number][]”

有什么想法吗

这是因为地图是如何键入的

官方定义是:

mapcallbackfn:value:T,index:number,array:T[]=>U,thisArg?:any:U[]

若不指定U,则默认U[]将与数组[]相同

问题是[number,number]是数组的一个子集,没有指定U的map将意味着返回类型将是Array

这两种类型不兼容,就会出现错误

解决方案是指定允许返回的映射:

常量okToo:点=[0]。映射=>[0,0]

另一方面,我预计这也会失败:

常量notOk:点=[0]。映射=>[0,0,0]

但在TypeScript2.6.1上是允许的。这是3.3中的一个错误,非常好。

这是因为map是如何键入的

官方定义是:

mapcallbackfn:value:T,index:number,array:T[]=>U,thisArg?:any:U[]

若不指定U,则默认U[]将与数组[]相同

问题是[number,number]是数组的一个子集,没有指定U的map将意味着返回类型将是Array

这两种类型不兼容,就会出现错误

解决方案是指定允许返回的映射:

常量okToo:点=[0]。映射=>[0,0]

另一方面,我预计这也会失败:

常量notOk:点=[0]。映射=>[0,0,0]


但在TypeScript2.6.1上是允许的。但是,3.3中出现了一个错误,这非常好。

这在const fail:Points=[0]下仍然有效。map=>[0,0]我认为您需要显式定义map返回类型:const fail:Points=[0]。map=>[0,0]否则,map无法准确猜测返回类型是什么,因为它是动态的。我如何在JSX环境中工作@adigaAh,编译器认为Point是一个组件?是的,但briosheje的建议有效。无论如何,谢谢你。您应该在@brioshejeThis中找到答案,尽管const fail:Points=[0]。map=>[0,0]我认为您需要显式定义map返回类型:const fail:Points=[0]。map=>[0,0]否则,map无法准确猜测返回类型,因为它是动态的。我如何在JSX环境中工作@adigaAh,编译器认为Point是一个组件?是的,但briosheje的建议有效。无论如何,谢谢你。你应该回答这个问题@brioshejeCourtesy player:@briosheje谢谢!问题:我如何使用它来查看编译错误?每当键入错误时,只需高亮显示该行,它就会显示错误,就像OP提供的原始游乐场:游乐场:酷!在TS3.3中[0,0,0]也是一个错误。我想这应该是一个错误,因为您显式定义的返回类型必须是Point类型。对我来说,2.6.1中允许这样做是很奇怪的。有趣:P.礼貌操场:@briosheje谢谢!问题:我如何使用它来查看编译错误?每当键入错误时,只需高亮显示该行,它就会显示错误,就像OP提供的原始游乐场:游乐场:酷!在TS3.3中[0,0,0]也是一个错误。我想这应该是一个错误,因为您显式定义的返回类型必须是Point类型。对我来说,2.6.1中允许这样做是很奇怪的。有趣的:P。
type Point = [number, number]
type Points = Array<Point>

const ok: Points = [[0, 0]]
const fail: Points = [0].map(() => [0, 0])