【发布时间】:2022-01-26 16:27:24
【问题描述】:
在以下代码块中,使用<>-Notation 定义了属性笔的类型:
return {
...defaultValues,
pens:
<[{penStrokeColor: string, penStrokeWidth: number, penOpacity: number}]>
[...Array(5).keys() ].map((_)=> {
return {
penStrokeColor: defaultValues.currentItemStrokeColor,
penStrokeWidth: defaultValues.currentItemStrokeWidth,
penOpacity: defaultValues.currentItemOpacity
}})
}
上面的代码有效,但我的 linter 抱怨这个类型提示应该以不同的方式声明:
Use 'as [{ penStrokeColor: string; penStrokeWidth: number; penOpacity: number }]' instead of '<[{ penStrokeColor: string; penStrokeWidth: number; penOpacity: number }]>' @typescript-eslint/consistent-type-assertions
这也可以内联完成吗?如果可以,怎么做?
【问题讨论】:
-
为什么你首先使用类型断言呢?那是一种代码气味。 (尖括号类型断言正在过时,因为它们与 JSX/TSX 不兼容,很容易与类型参数混淆,我个人觉得它们很难看,而
as断言要好得多,imo . -
旁注:
[...Array(5).keys() ].map可能是Array(5).keys().map -
请参阅Array.from,了解从回调创建数组的更自然方式
-
@JuanMendes 我以前使用过 Array.from 但由于某种原因,所有五个元素都会引用同一个实例 - 因此,通过更改一个对象,它会更改所有五个 - 我真的很想确定这个问题已修复,所以我使用了扩展语法(这可能不是必需的 xD)和 map
-
@MartinDallinger 笑说“我真的很想确保这个问题得到解决,所以我使用了扩展语法”
标签: javascript typescript eslint