我可以指定一个数组不可分配给 Record 吗?
Can I specify that an Array is not assignable to Record?
我有一个 Record<number, MyType>
类型的成员。目前,我还可以为其分配一个数组。我明白了:数组是一个对象 (typeof [] => 'object'
),索引是键。但是,是否可以告诉编译器我不想让数组传递给我类型为 Record<int, WhateverType>
的变量?
const myRecord: Record<number, MyType> = []; // <= would like to have an error here
自定义 NumberRecord
类型可以通过强制排除数组,即不存在 length
属性(类似于 ArrayLike
内置声明):
const t = {
0: "foo",
1: "bar"
}
const tArr = ["foo", "bar"]
type NumberRecord<T> = {
length?: undefined; // make sure, no length property (array) exists
[n: number]: T;
}
const myRecordReformed1: NumberRecord<string> = tArr; // error
const myRecordReformed2: NumberRecord<string> = t // works
我有一个 Record<number, MyType>
类型的成员。目前,我还可以为其分配一个数组。我明白了:数组是一个对象 (typeof [] => 'object'
),索引是键。但是,是否可以告诉编译器我不想让数组传递给我类型为 Record<int, WhateverType>
的变量?
const myRecord: Record<number, MyType> = []; // <= would like to have an error here
自定义 NumberRecord
类型可以通过强制排除数组,即不存在 length
属性(类似于 ArrayLike
内置声明):
const t = {
0: "foo",
1: "bar"
}
const tArr = ["foo", "bar"]
type NumberRecord<T> = {
length?: undefined; // make sure, no length property (array) exists
[n: number]: T;
}
const myRecordReformed1: NumberRecord<string> = tArr; // error
const myRecordReformed2: NumberRecord<string> = t // works