Typescript-强制转换Object.keys()返回值的更好方法是什么?

Typescript-强制转换Object.keys()返回值的更好方法是什么?,typescript,casting,Typescript,Casting,我认为代码本身会说话,因此它是: type myType=“a”|“b”|“c”; 类型myMappedType={[str in myType]:number}; 常量值:myMappedType={ 答:1,, b:2, c:3 }; const keys=Object.keys as(o:T)=>Extract[]; const keys2=Object.keys as(o:T)=>数组; Object.keys(值)//string[] 键(值)//myType[] keys2(值)//

我认为代码本身会说话,因此它是:

type myType=“a”|“b”|“c”;
类型myMappedType={[str in myType]:number};
常量值:myMappedType={
答:1,,
b:2,
c:3
};
const keys=Object.keys as(o:T)=>Extract[];
const keys2=Object.keys as(o:T)=>数组;
Object.keys(值)//string[]
键(值)//myType[]
keys2(值)//myType[]
强制转换Object.keys()的返回值的更好方法是什么

  • 我应该使用
    还是
    键2
    实现?还是另一个
  • 哪一个更好,为什么

提前谢谢

我认为
版本更正确。主要区别在于
keys 2
将在结果类型中包括数字和键,但符号键将不在
对象的结果中。键

我想在提取类型中包括
number

const keys = Object.keys as <T>(o: T) => Extract<keyof T, string | number>[];
const keys=Object.keys as(o:T)=>Extract[];
Object.keys
将返回数字键(作为字符串),但如果不进行此更改,返回类型中将丢失这些数字键。

即使使用
记录
Object.keys
也将返回
字符串[]
。但是,如果要使用ES6
地图

type myType = "a" | "b" | "c";

const mapValues = new Map<myType, number>(
    [
     ['a', 1]
     , ['b', 2]
     , ['c', 3]
    ]
)

mapValues.keys() // IterableIterator<myType>
type myType=“a”|“b”|“c”;
常量映射值=新映射(
[
[a',1]
,[b',2]
,[c',3]
]
)
mapValues.keys()//iTerableTerator

地图构造器比对象文字稍微不符合人体工程学,但它们似乎更适合TypeScript的输入。我试图找出一条关于对象类型的老线索,用它来展示奇怪的边缘情况,但徒劳。

非常感谢您的回答!我也在考虑在摘录版本TBH中包含数字,但不确定。在接受您的最终答案之前,我将再等一段时间,看看是否有人对此有不同的意见。再次感谢!
Extract
的一个障碍是
对象。键({0:0})[0]
“0”
,而不是
0
。如果你真的有数字键,你需要更仔细地考虑你在做什么…这可以是对Object.keys的改进,提供一个数字类型。有人能告诉我这里正在做什么吗
const-keys=Object.keys as(o:T)=>Extract[]我们正在转换Object.keys方法的实现吗?我已经在使用接口,所以使用映射不是我的选择。