37

I want to assign a variable, which is string | undefined, to a string variable, as you see here:

private selectedSerialForReplace(): string | undefined {
    return this.selectedSerials.pop();
  }

luminaireReplaceLuminaire(params: {  "serial": string; "newserial": string; }, options?: any): FetchArgs {
............
}

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace(), newserial: response.output});

I get this error:

Argument of type '{ serial: string | undefined; newserial: any; }' is not assignable to parameter of type '{ "serial": string; "newserial": string; }'

I cannot change selectedSerialForReplace() function to return anything else. Could you please help me?

Sohrab
  • 1,348
  • 4
  • 13
  • 33
  • Please try to improve your [MCVE] with reproducible code. What is the logic behind `luminaireReplaceLuminaire`? Is it supposed to accept undefined "serial" parameters? – E_net4 Jul 19 '17 at 15:36

2 Answers2

39

The typescript compiler performs strict null checks, which means you can't pass a string | undefined variable into a method that expects a string.

To fix this you have to perform an explicit check for undefined before calling luminaireReplaceLuminaire().

In your example:

private selectedSerialForReplace(): string | undefined {
    return this.selectedSerials.pop();
}

luminaireReplaceLuminaire(params: {  "serial": string; "newserial": string; }, options?: any): FetchArgs {
    ............
}

const serial = this.selectedSerialForReplace();
if(serial !== undefined) {
    luminaireReplaceLuminaire({serial, newserial: response.output});
}
Acevail
  • 506
  • 4
  • 4
  • 7
    Side note, it's important to use `!=` when checking `undefined` to catch `null` as well. `null == undefined` is `true`, `null === undefined` is `false` – Dagrooms Apr 12 '19 at 19:58
35

If you are sure that serial could not be undefined you can use the ! post-fix operator

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace()!, newserial: response.output});
sschoof
  • 1,531
  • 1
  • 17
  • 24