如何将对象的每个属性以字符串形式输入,除了一个?

问题描述 投票:0回答:1

我很乐意在打字稿中进行以下操作,其中我的对象可以接受任何属性作为字符串,但是当使用specialCase属性时,它应该是int []。我该怎么办?

interface MyObject {
  nodeName: string;
  props: {
    [x: string]: string;
    specialCase: int[];
  };
}
typescript typescript-typings
1个回答
0
投票

由于索引签名[x: string]: string;的要求,您不能直接执行此操作,即每个属性键都具有兼容的string值类型。最简单的方法可能是将索引签名与显式属性分开:

interface MyObject2 {
  nodeName: string;
  props: {
    strings: { [x: string]: string }
    specialCase: number[];
  };
}

如果将所有内容都保留在props中,则必须加宽签名属性值类型,并且有必要进行一些缩小(here is a sample):

declare const obj: MyObject

obj.props.specialCase // number[]
obj.props["foo"] // string | number[]
assertString(obj.props["foo"]) // string

function assertString(s: any): string {
  if (typeof s !== "string") throw new Error()
  return s
}
© www.soinside.com 2019 - 2024. All rights reserved.