MichaelAttard
MichaelAttard

Reputation: 2158

Is it possible to set default generic type?

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

Answers (1)

Saravana
Saravana

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

Related Questions