typescript - Tilldela en egenskap i ett objekt med egenskaper av olika typ
Denna kod var giltig i 3.3.3, men misslyckas med att kompilera i 3.5.1 och nyare. Hur kan jag fixa det? Playground.
interface IData {
a: string;
b: number;
}
var form: IData = { a: "", b: 0 };
function doSmth(field: keyof IData, value: any) {
form[field] = value; // Type 'any' is not assignable to type 'never'.
}
Okej, verkar som att jag har förstått anledningen: den tidigare typen av form[field] var string | number, men nu är det string & number vilket är never. Men jag måste fortfarande få det att fungera...
Svar #1
Verkar löst genom att använda en generisk parameter:
interface IData {
a: string;
b: number;
}
var form: IData = { a: "", b: 0 };
function doSmth<F extends keyof IData = keyof IData>(field: F, value: IData[F]) {
form[field] = value;
}
doSmth("a", "abc")
doSmth("b", 13)
