应该TypeScript保证功能'回报价值?

时间:2016-08-03 09:50:47

标签: typescript

我有以下简单函数,它接受任何类型的参数,并且应该返回一个数字:

function foo(x:any): number {
    return x.bar;
}

var b = {bar: "shit happens"};
console.log(foo(b)); // foo returns 'shit happens' which is not a number.

似乎如果x.bar不包含数字,则此函数的返回值可以是任何值。

我的问题是:有没有办法保证函数的返回值始终是一个数字,而不是其他任何东西(比如在其他强类型语言中)?如果没有,那么如果打字系统只提供一个"提示"那么使用TypeScript的优点是什么?应该使用的优选返回类型,并允许不正确的返回类型。

1 个答案:

答案 0 :(得分:4)

此处的问题是您使用any类型 基本上你是在告诉编译器"看,我知道我在做什么,不为我检查事情"。
你应该避免使用any因为你绕过编译器检查,如果你要这样做,那么为什么不使用javascript呢?

如果您不能使用any但不是类型或界面,那么您将收到错误:

type FooParam = {
    bar: number;
}

function foo(x: FooParam): number {
    return x.bar;
}

var b = { bar: "shit happens" };
console.log(foo(b));

code in playground

您在最后一行会收到错误:

  

类型{ bar: string; }的参数不能赋值给参数   输入{ bar: number; }

您可以避免使用此FooParam类型:

function foo(x: { bar: number }): number { ... }