كيف يمكنني تعريف قيمة إرجاع كائن في TypeScript لدالة؟


تبدو الدالة الخاصة بي هكذا:

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
    };
};

أنا ملم بإرجاع السلاسل والأرقام، لكن كيف يمكنني تحديد أن القيمة المرجعة هي كائن يحتوي على معاملين: lower و upper؟

الإجابة رقم 1

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

أو

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

أو

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

أو

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

أو

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

أو

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

الإجابة رقم 2

يستنتج TypeScript أنواع إرجاع الدوال، لذلك يؤدي هذا إلى خطأ أثناء الترجمة دون الحاجة لتحديد الأنواع صراحةً:

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

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

مثال حي يوضح الخطأ:

الخاصية 'foo' غير موجودة على القيمة من النوع '{ lower: number; upper: number; }'.