我有以下简单函数,它接受任何类型的参数,并且应该返回一个数字:
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的优点是什么?应该使用的优选返回类型,并允许不正确的返回类型。
答案 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));
您在最后一行会收到错误:
类型
{ bar: string; }
的参数不能赋值给参数 输入{ bar: number; }
您可以避免使用此FooParam
类型:
function foo(x: { bar: number }): number { ... }