2017-02-07 77 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