我可以指定一个数组不可分配给 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

Code sample