javascripttypescripttype-assertionarray-indexing

How to assert that a string can be used as an array index w/o converting/asserting it to/as a number?


I have a string value, which I intend to use as an index of an array. I'm sure of this value and want to assert that it's a valid 'index value', w/o converting it to a number at runtime or asserting it's a number (b/c it's not a number).

So I have:

const inputEl = window.document.getElementById('foo') as HTMLInputElement;
//it's indeed a string, I'm sure of it and have no squirm because of it
const v = inputEl.value as string;
const a = ['foo',];
const result = a[v];

console.log(result);

Currently tsc throws

Element implicitly has an 'any' type because index expression is not of type 'number' (tsserver 7015)

I'd rather not do something like:

//just because it's not a number
const v = inputEl.value as unknown as number;

Is there a better way to do it? Thank you.


Solution

  • Just don't use the input .value string. Use its .valueAsNumber.