Typescript kombinera typer "keyof X" & SomeType
Jag vill definiera en typ som är nyckeln till någon annan typ. Det är möjligt att göra detta
interface B {
x: something;
y: string;
z: something;
}
type keyOfB = keyof B;
export class A {
foo: keyOfB;
}
Men samtidigt vill jag att foo bara ska vara en viss typ t.ex. sträng eller något, hur kombinerar man det?
foo: keyOfB & type
funkar inte.
Teoretiskt sett är det ett jobb för Pick<> eller Extract<>, men jag kan inte få det att fungera
https://www.typescriptlang.org/docs/handbook/utility-types.html
Svar #1
Så jag modifierade svaret som publicerades här https://stackoverflow.com/a/53899815
till detta och det verkar fungera :)
type KeyOfType<T extends object, Type> = Exclude<{
[K in keyof T]: T[K] extends Type
? K
: never
}[keyof T], undefined>
användning :
interface B {
x: something;
y: string;
z: something;
}
export class A {
foo: KeyOfType<B, string>;
}
Foo-egenskapen kommer endast att tillåtas att tilldela nyckeln i B som är av typen sträng. (endast 'y' i detta fall)
