Home > Mobile >  Argument of type 'string | number' is not assignable to parameter of type 'string
Argument of type 'string | number' is not assignable to parameter of type 'string

Time:08-09

I created a function for setting multiple HTML attributes at once -

function attrs(element: HTMLElement, attrs: { [key: string]: string | number }): void {
  for (let attr in attrs) {
    element.setAttribute(attr, typeof attr === 'number' ? attrs[attr].toString() : attrs[attr])
  }
}

I was trying to generic object which accepts key of type string and value of type string or number. But as we know setAttribute() takes 2 args of type string. I put a check; to check whether the value is type of string or number and if the type is number I changed it to string as you can see in the function.

Even then I am getting

Argument of type 'string | number' is not assignable to parameter of type 'string'.
Type 'number' is not assignable to type 'string'.

P.S - Also suggest a better title for this question

CodePudding user response:

Use an intermediate variable to help with the narrowing:

function attrs(element: HTMLElement, attrs: { [key: string]: string | number }): void {
  for (let attr in attrs) {
    const attrValue = attrs[attr];
    element.setAttribute(attr, typeof attrValue === 'number' ? attrValue.toString() : attrValue)
  }
}

Playground

  • Related