for(const item in myRecord); myRecord是一个Record<string,int>类型的数据,为什么这个item拿到的是string,而不是一个键值对
在 TypeScript 中,当您使用 for...in
循环迭代一个对象时,它会迭代对象中可枚举的属性(包括继承而来的属性)。而在 Record<string, int>
类型的数据中,键的类型为 string
,值的类型为 int
。因此,在使用 for...in
循环迭代该对象时,每个键都被视为一个字符串类型。
所以,当您通过 for...in
循环迭代一个 Record<string, int>
类型的对象时,循环中的变量 item
对应的是该对象中的每个键(即字符串类型),而不是键值对。
如果您想要遍历这个对象的所有键值对,可以使用 Object.entries()
方法将其转换为一个由 [key, value] 数组组成的数组,然后再进行迭代,如下所示:
const myRecord: Record<string, number> = { 'a': 1, 'b': 2 };
for (const [key, value] of Object.entries(myRecord)) {
console.log(key, value); // 输出 'a' 1 和 'b' 2
}
使用 Object.entries()
方法将 myRecord
对象转换为一个由 [key, value] 数组组成的数组,并使用解构方式获取数组中的每个元素,从而得到了每个键值对。
如果我这个record里面有多个键值对?
如果您的 Record<string, int>
类型的数据中有多个键值对,您可以使用 for...in
循环进行迭代,依次访问所有的键和值。例如,假设我们有以下 myRecord
对象:
const myRecord: Record<string, number> = { 'a': 1, 'b': 2, 'c': 3 };
您可以通过以下方式循环遍历这个对象:
for (const key in myRecord) {
if (Object.prototype.hasOwnProperty.call(myRecord, key)) {
const value = myRecord[key];
console.log(`${key}: ${value}`);
}
}
在上述代码中,我们使用 for...in
循环来遍历对象中的所有属性(即键)。然后,我们使用 hasOwnProperty()
方法来检查每个属性是否为对象本身的属性,以避免意外访问到继承的属性。接着,我们通过 myRecord[key]
来获取每个键对应的值,并将其打印出来。
输出结果为:
a: 1
b: 2
c: 3
总结下来还是定义Dto比较方便后期维护