2017-02-07 150 views
1

鑑於this code sample in TypeScript playground的靜態屬性,我不能夠正確地鍵入greeterBuilderName變量,以便它可以傳遞給getProp實用... keyof Greeter其實是道具/方法上實例迎賓的名單,我怎麼能指定我想要Greeter func本身的道具(prototypewarm_greeter,...)?keyof爲打字稿類

換句話說,greeterBuilderName的適當類型是什麼?

謝謝!

function getProp<T, K extends keyof T>(object: T, property: K): T[K] { 
    return object[property]; 
} 

class Greeter { 
    private greeting: string; 
    public constructor(message: string) { 
     this.greeting = message; 
    } 
    public greet(): string { 
     return "Hello, " + this.greeting; 
    } 
    public static warm_greeter(): Greeter { return new Greeter('good o\' fellow'); } 
} 

let greeterBuilder:() => Greeter = getProp(Greeter, 'warm_greeter'); // ok 
alert(greeterBuilder().greet()); // ok 

const greeterBuilderName: keyof Greeter = 'warm_greeter'; // does not build :(
greeterBuilder = getProp(Greeter, greeterBuilderName); // does not build :(
alert(greeterBuilder().greet()); 

回答

3

我想你想獲得Greeter類本身的鑰匙,因此

const greeterBuilderName: keyof typeof Greeter = 'warm_greeter'; 
+0

謝謝!有用。你救了我幾個小時:) – halogenr