How to assign string | undefined to string in TypeScript?
Asked Answered
C

2

44

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?

Courtnay answered 19/7, 2017 at 15:28 Comment(2)
Please try to improve your minimal reproducible example with reproducible code. What is the logic behind luminaireReplaceLuminaire? Is it supposed to accept undefined "serial" parameters?Mothy
You can specify type for useState(), e.g: const [username, setUsername] = useState<string | null>(null);Raynell
H
42

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});
}
Horotelic answered 19/7, 2017 at 15:35 Comment(1)
Side note, it's important to use != when checking undefined to catch null as well. null == undefined is true, null === undefined is falseErasmoerasmus
S
38

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

luminaireReplaceLuminaire({serial: this.selectedSerialForReplace()!, newserial: response.output});
Salomon answered 29/11, 2017 at 13:27 Comment(1)
any quick solution if it's array of [string | undefined ] to [ string ]Kesterson

© 2022 - 2024 — McMap. All rights reserved.