Alan2
Alan2

Reputation: 24572

How can I define a Typescript object return value for a function?

My function looks like this:

parseRange = (text) => {
    var arr = [];
    var lower = null;
    var upper = null;
    if (!text || text === "") {
        lower = null;
        upper = null;
    }
    else if (text.indexOf("-") > 0) {
        arr = text.split("-");
        lower = +arr[0];
        upper = +arr[1];
    }
    else {
        lower = +text;
        upper = null;
    }
    return {
        lower: lower,
        upper: upper
    };
};

I am familiar with returning strings and numbers but how can I specify the return is an object with a lower and upper parameter?

Upvotes: 50

Views: 119882

Answers (2)

Douglas
Douglas

Reputation: 37761

TypeScript infers function return types, so this results in a compile error without having to specify the types explicitly:

var parseRange = (text) => {
    return {
        lower: 5,
        upper: 6
    };
};

var range = parseRange("");
range.foo; // compile error

Live example which shows the error:

The property 'foo' does not exist on value of type '{ lower: number; upper: number; }'.

Upvotes: 8

Markus Jarderot
Markus Jarderot

Reputation: 89171

parseRange = (text: string) : { lower: number; upper: number; } => {
    // ...
    return {
        lower: lower,
        upper: upper
    };
};

or

parseRange = <(text: string) : { lower: number; upper: number; }> ((text) => {
    // ...
    return {
        lower: lower,
        upper: upper
    };
});

or

var parseRange : (text: string) => { lower: number; upper: number; } = (text) => {
    // ...
    return {
        lower: lower,
        upper: upper
    };
};

or

parseRange = function (text: string) : { lower: number; upper: number; } {
    // ...
    return {
        lower: lower,
        upper: upper
    };
};

or

function parseRange(text: string) : { lower: number; upper: number; } {
    // ...
    return {
        lower: lower,
        upper: upper
    };
};

or

interface RangeResult {
    lower: number;
    upper: number;
}
function parseRange(text: string) : RangeResult {
    // ...
    return {
        lower: lower,
        upper: upper
    };
};

Upvotes: 132

Related Questions