typescript - 类型中所有属性名称的数组
问题描述
我正在使用以下代码。
type PersonRow = {
name: string;
email: string;
phone_number: string;
age: number;
}
const personColumnNames: (keyof Omit<PersonRow, 'age'>)[] = [
'name',
'email',
'phone_number'
];
但是,当我从 personColumnNames 中删除时,我想得到一个错误phone_number
(以防一列被添加到 PersonRow 类型)。
type PersonRow = {
name: string;
email: string;
phone_number: string;
age: number;
}
const personColumnNames: (keyof Omit<PersonRow, 'age'>)[] = [
'name',
'email'
];
编辑:
这是我发现的一种 hacky 方式,但这似乎仍然不太理想。
const personColumnNames = Object.keys(((): { [key in keyof Omit<PersonRow, 'age'>]: null } => ({
name: null,
email: null,
phone_number: null,
}))())
解决方案
要使用 Typescript 键入数组,您有两个选择。
常见
SomeType[]
的说法是“我有一个数组,并且该数组中的每个项目都是SomeType
. 这对您不起作用,因为无法输入长度,并且每个项目不能依赖于任何其他项目。一个元组:
[TypeA, TypeB, TypeC]
. 这表示一个固定长度的数组,其中每个索引处的项目类型是已知的。这对您不起作用,因为顺序很重要。我也不相信您可以创建具有动态长度的这种类型。
所以我不相信有一种方法可以做你想做的事。在不知道您打算如何使用此阵列的情况下,很难提出替代方案。
推荐阅读
- laravel - 无法使用 --step 单列回滚
- javascript - Line 和 Rect 交点在一个轴上没有正确计算
- reactjs - 如何为 React PureComponent 或 React.memo 组件的浪费渲染编写单元测试
- python - 按 ENTER 退出 Python 中的程序不起作用
- node.js - Microsoft Bot Framework 在同时向机器人发送请求的用户之间混合对话和对话
- node.js - 在 Heroku 上部署 typescipt express 服务器
- android - 如何将存储在 Firebase 中的数组(作为值)设置为 Dropdown 并绑定到 Flutter 中的上一个下拉列表
- reactjs - 列表中的每个孩子都应该有一个唯一的“关键”道具图像
- node.js - 如何避免用户看到来自其他用户套接字的数据?
- python - 使用 jax.random.normal 对具有特定均值和标准差的单变量高斯分布进行采样