5

假设我在 Typescript 2.0 中有以下功能:

doSomething(): any {

    const apple: Apple = ...
    const pears: Pear[] = ...

    return {
        apple: apple,
        pears: pears
    }
}

我知道我的函数将始终返回一个具有appletype 属性和 typeApple属性pear的对象Pear[]

我并不特别想创建一个新类来对此进行建模。有没有办法将我的返回类型从更改any为更有意义的类型?

4

3 回答 3

5

您可以使用内联接口:

doSomething(): {apple: Apple, pears: Pear[]} {

    const apple: Apple = ...
    const pears: Pear[] = ...

    return {
        apple: apple,
        pears: pears
    }
}
于 2016-09-16T14:27:53.040 回答
5

我知道已经有一个公认的答案,并且答案确实给了你想要的结果......但它通过为你做更多的工作来做到这一点。

我想让你早点去酒吧,所以我的回答是……

拥抱类型推断

像这样:

doSomething() {

请注意,您所要做的就是删除类型注释。

下面是一个完整的工作示例。将鼠标悬停result在编辑器中,您会看到编译器已经知道返回类型,而无需您全部输入。

class Apple {
    appleThing: string;
}

class Pear {
    pearThing: string;
}

function doSomething() {

    const apple: Apple = new Apple();
    const pears: Pear[] = [new Pear()];

    return {
        apple: apple,
        pears: pears
    }
}

var result = doSomething();
于 2016-09-16T16:02:32.313 回答
2

除了@toskv 答案,您还可以使用类型

type Fruits = { apple: Apple, pears: Pear[] }

doSomething(): Fruits {

    const apple: Apple = ...
    const pears: Pear[] = ...

    return {
        apple: apple,
        pears: pears
    }
}

我定义一个类型是有意义的,因为您可能会在定义最终将调用函数的变量时重用它:let fruits: Fruits; ...; fruits = doSomething()

操场上看

于 2016-09-16T14:35:46.643 回答