javascript - 是否有可能指定来自道具的数组长度?
问题描述
是否可以指定来自props
使用 type from的数组的长度Typescript
?
我们有一个对象数组:
const arrayPassedViaProps = [
{ key: '1', label: 'Label 1', value: 9 },
{ key: '2', label: 'Label 2', value: 3 },
{ key: '3', label: 'Label 3', value: 3 },
{ key: '4', label: 'Label 4', value: 22 },
{ key: '5', label: 'Label 5', value: 1 }
]
我像这样传递这个数组props
:
<DownlineProgress data={arrayPassedViaProps} />
在DownlineProgress
组件内部我定义了一个类型:
type DownlineProgressBarProps = {
data: {
key: string
label: string
value: number
}[]
}
我正在使用这种类型props
export const DownlineProgress = ({data}: DownlineProgressBarProps) => ...
当我传递数组没有正确长度的道具时,我希望 Typescript 通知我,它应该包含两个或三个对象
我如何修改我type
的以实现这种行为?
PS。目前我正在使用if
语句来检查
if(data.length > 3 || data.length < 2){
throw(`DownlineProgress need an array of length 2 or 3. You pass ${data.length}`)
}
解决方案
这是一个纯 TypeScript 解决方案:
interface Data {
key: string;
label: string;
value: number;
}
// The following type should have two or three elements of type Data
type ArrayWithTwoOrThreeDataElements = [ Data, Data, Data? ];
在您的情况下,由于在 props 值中您期望一个具有名为data
Data 类型的属性的对象,您可以按如下方式定义 props 的类型:
type DownlineProgressBarProps = [
{ data: Data },
{ data: Data },
{ data: Data }?
];
如果您想避免重复数据属性键,自然可以为单个道具项目创建一个类型:
interface Data {
key: string;
label: string;
value: number;
}
interface DownlineProgressBarProp {
data: Data
}
type DownlineProgressBarProps = [
DownlineProgressBarProp,
DownlineProgressBarProp,
DownlineProgressBarProp?
];
推荐阅读
- python - 如何在以后的某个单元中重新运行特定的 Jupyter 笔记本单元?(不使用函数,泡菜缓存等)
- javascript - 使用烧瓶本地上传的图像不会显示在另一个页面上
- python - 实例的弱引用在删除后不起作用,但在删除时适用于整个类
- three.js - aframe.js 如何改变形状中心位置?(枢轴)
- jqgrid - JqGrid - 更新所有数据单元格中的值
- java - Java 11:标准 API 和额外的选择字段
- heroku-postgres - 将 postgresql 数据库迁移到 heroku
- sql-server - 为什么 SqlConnection.Open() 在 Unity WebGL 应用程序中触发“无法扩大内存数组”错误
- python - 将图像列表转换为一个视频时在FFmpeg中设置图像持续时间?
- x86-16 - Emu8086 - 尝试向下移动光标时光标位置不正确