如何从链式方法返回正确的类型?

时间:2018-09-14 01:03:03

标签: typescript typescript-typings

我有一个服务,其中有两个方法,我想进行方法链接并获取其类型信息。

const result = FirstMethod().SecondMethod();

方法的定义如下:

FirstMethod(): any {
 // do some stuff
 return this;
} 

SecondMethod(): MyAwesomeType {
   return this.getMyAwesomeValue();
}

问题是结果返回为任何类型,但没有类型信息。我希望这是因为我的第二个方法返回了MyAwesomeType,我将能够获得该类型的信息。

很明显,我可以将结果强制为我可能期望的类型,但是例如,如果我在此处输入错误的类型,则不会提供太多的类型安全性。我该怎么办?

2 个答案:

答案 0 :(得分:1)

签出Advanced Types。告诉编译器您将返回any会破坏类型推断除非,您将其封装在一个类中:

class Fooby {
    //instead of returning any here, consider returning `this`
    foo(): any /*returns Fooby instance*/ {
        return this;
    }

    betterFoo(): this /*returns Fooby instance, more explicit*/ {
        return this;
    }

    bar(): number {
        return 3;
    }
}

console.log(
    new Fooby().foo().bar()//3
);

不能用作函数

foo2(): any {
    return this;
}

bar2(): number {
    return 3;
}

console.log(
    foo2().bar2()
);

答案 1 :(得分:1)

我想这取决于您的开发环境,但是在WebStorm中,它有助于定义第一种方法的返回类型。

enter image description here

@Rafael的回答也是如此,但我认为将返回类型标记为类名而不是this更为明确。