Hur får man en lista över nycklar av generisk typ (TypeScript)?
Hur får man en lista med nycklar från en generisk objekttyp?
generisk klass:
export class GenericExample<T>{
private _keys: string[];
constructor()
{
this.keys = // all keys of generic type T
}
get keys(obj: T[])
{
return this._keys;
}
}
exempel på användning med gränssnitt:
export interface someInterface { foo: string; bar: string; };
export class someClass { id: number; name: string; };
let example1 = new GenericExample<someType>();
example1.getKeys([]) // output: ["foo", "bar" ]
exempel på användning med klass:
let example2= new GenericExample<someClass>();
example2.getKeys([]) // output: ["id", "name" ]
Svar #1
Den generiska typen är bara en typ, så du behöver skicka in ett faktiskt objekt som matchar den till konstruktorn. Först då kan du få nycklarna.
Dessutom tar en getter inga parametrar, så jag tog bort dem.
Något sådant här:
export class GenericExample<T>{
private _keys: Array<keyof T>;
constructor(obj: T)
{
// The keys from generic type T are only types,
// so you need to pass in an object that matches T
// to the constructor. Then we can do this:
this._keys = Object.keys(obj) as Array<keyof T>;
}
get keys()
{
return this._keys;
}
}
// Usage
const obj = { foo: "foo", bar: "bar" };
const instance = new GenericExample(obj);
// instance.keys infer to ("foo" | "bar")[] and will return ["foo", "bar"]
Svar #2
Du kan bara använda Object.keys(obj) vilket kommer att returnera en array med objektets nycklar. (I det här fallet, ["foo", "bar"]
