键盘上行走的猿 2023-04-25 17:44 采纳率: 0%
浏览 16

ts声明一个对象key很多,但是值只有string和number,如下写法是否可行,或者还有没有更好的写法

ts声明一个对象key很多,但是值只有string和number,如下写法是否可行,或者还有没有更好的写法

// 正常写法
export interface AssignmentList {
  deviceJobId: number
  damageType: number
  adressInfo: string
  deviceName: string
  latitude: string
  longitude: string
  feedBackFistTime: string
  //...
}
// ....
type AssignmentListString = 'adressInfo' | 'deviceName' | 'latitude' | 'longitude' | 'feedBackFistTime' // ...
type AssignmentListNumber = 'deviceJobId' | 'damageType'
export type AssignmentList = { [p in AssignmentListNumber]: number } & { [p in AssignmentListString]: string }
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-26 10:21
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      可以使用索引签名来声明该对象,就像参考资料中段落0的代码一样,同时支持string和number类型的索引签名可以混用。 具体实现步骤如下: 1. 使用interface关键字定义一个新的接口。 2. 在接口内使用索引签名,key的类型设为string,值的类型为string和number联合类型。 3. 初始化一个空对象,并将其类型声明为这个新接口类型。 4. 给该对象赋值时,key可以是任意字符串(必须是string类型),也可以是任意数字(必须是number类型),值可以是字符串或数字。 例如:

      interface MyObj {
        [key: string]: string | number;
      }
      
      const myObj: MyObj = {};
      myObj['name'] = 'Tom';
      myObj['age'] = 18;
      myObj[1] = 'one'; // 编译器不会报错,但是不推荐将数字作为key
      

      需要注意的是,由于Javascript的隐式类型转换,如果使用数字作为key,会将其转换为字符串。因此,虽然不会报错,但是无法像字符串key一样直接访问该属性。同时,不推荐使用数字作为key。 至于段落3的内容,不建议使用String和Number来表示数据类型,建议使用小写的string和number关键字。这两者之间的区别在于,String和Number是JS内置的构造函数,不是基本的数据类型,不同于string和number这两个基本数据类型,因此不建议使用。同时,TS会将它们解释为构造函数类型,比较麻烦。 段落4中的示例也展示了如何自定义Props类型。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题