Typescript如何从函数中返回正确的类型

时间:2018-02-21 16:50:47

标签: typescript

我有一个返回字符串或数字的函数。我希望typescript根据我的if语句自动确定返回的值。我怎么能这样做?

function isString(value): boolean {
    return typeof value === 'string';
}

function something(val) : string | number {
    if (isString(val)) {
        return 'string';
    }

    return 1;
}

const v = something(1);

v type是string | number,我希望在这种情况下它是一个数字。

2 个答案:

答案 0 :(得分:2)

您可以使用重载方法定义。当您提供多个方法签名时,最后一个是实际实现,TypeScript将隐藏其签名。

function something(val: string): string;
function something(val: any): number;
function something(val: any): string | number {
    if (isString(val)) {
        return 'string';
    }

    return 1;
}

答案 1 :(得分:0)

正如您所做的那样...请参阅以下TypeScript:

class Test {
    isString (value: any): boolean {
        return typeof value === 'string'
    }

    something (val: any): string | number {
        if (this.isString(val)) {
        return 'string'
        }
        return 1
    }
}

let test = new Test()
console.log(typeof test.something("A"))
console.log(typeof test.something(1))

它编译成如下:

var Test = /** @class */ (function () {
    function Test() {
    }
    Test.prototype.isString = function (value) {
        return typeof value === 'string';
    };
    Test.prototype.something = function (val) {
        if (this.isString(val)) {
            return 'string';
        }
        return 1;
    };
    return Test;
}());
var test = new Test();
console.log(typeof test.something("A"));
console.log(typeof test.something(1));

如果您运行它...您可以看到它按预期返回stringnumber

我希望它可以帮助你,再见。