基于类类型参数

时间:2016-10-02 16:07:07

标签: typescript

说我有这个班:

class Test<T> {
    stuff: T;

    // these lines don't compile :(
    // whatIsStuff(this: Test<any[]>): string
    // whatIsStuff(this: Test<any>): number

    whatIsStuff() {
        if(this.stuff instanceof Array)
            return "an array"
        else
            return 1
    }
}

如何描述whatIsStuff()的返回值?我希望注释掉的行有效,但它抱怨this的存在。

如果我有一个免费功能,这个工作正常:

function whatIsStuffFor(a: Test<any[]>): string
function whatIsStuffFor(a: Test<any>): number
function whatIsStuffFor(a: Test<any>): any {
    if(this.stuff instanceof Array)
        return "an array"
    else
        return 1
}

demo

2 个答案:

答案 0 :(得分:0)

不确定您要完成的任务,但您可以使用联合类型来描述string or number返回类型:

class Test<T> {
    stuff: T;

    constructor(value : T) {
        this.stuff = value;
    }

    whatIsStuff() : string | number {
        if (this.stuff instanceof Array)
            return "an array";
        else
            return 1;
    }
}

var x = new Test("foobar")
var y = new Test([1, 2])

console.log(x.whatIsStuff()) // 1
console.log(y.whatIsStuff()) // an array

答案 1 :(得分:0)

我是个白痴,我提出的语法在https://github.com/Microsoft/TypeScript/pull/6739

之后工作得很好