Почему Typescript принимает строку []? И каков правильный способ
создать массив чисел здесь?
Поскольку имена свойств объекта всегда являются строками (или, чтобы правильно объяснить это, всегда приводят к строкам), следовательно, подпись по умолчанию предполагает string[]
в качестве типа по умолчанию, поскольку intellisense даже предлагает:
Кроме того, вы не можете гарантировать, что во время выполнения эти ключи будут числами . Определение типа, который строго определяет, что объект должен иметь числовые ключи , не имеет никакого эффекта во время выполнения , поэтому всегда безопаснее безопасно приводить значения к нужному типу:
const sizes: number[] = Object.keys(foo).map(Number); // beware of possible NaN here.