Reputation: 2158
Is it possible to restrict type of parameter dynamically, according to another parameter?
type Foo = {
bar: string;
baz: number;
}
let o: Foo;
function setProperty(key: keyof Foo, value: Foo[keyof Foo]) {
o[key] = value;
}
setProperty("bar", 55); // shouldn't be allowed
setProperty("bar", "55"); // allowed
Upvotes: 1
Views: 352
Reputation: 40534
Use lookup types with generics:
type Foo = {
bar: string;
baz: number;
}
let o: Foo;
function setProperty<P extends keyof Foo> (key: P, value: Foo[P]) {
o[key] = value;
}
setProperty("bar", 55); // Throws error
setProperty("bar", "55"); // allowed
Upvotes: 2