TypeScript类型推断
在TypeScript中,并不总是需要注明类型。当没有显式信息以类型注解的形式提供时,TypeScript编译器会推断类型信息。
在TypeScript中,当以下情况发生时,TypeScript编译器会推断类型信息:
- 变量和成员被初始化
- 为参数设置默认值
- 确定函数的返回类型
例如
let x = 3;
在上面的代码示例中,变量“x”的类型推断为数字类型。当初始化变量和成员、设置参数默认值以及确定函数返回类型时,类型推断会发生。
再举个例子。
var x = "JavaTpoint";
var y = 501;
x = y; // 编译时错误:类型“number”不能赋值给类型“string”
在上面的代码示例中,我们会得到一个错误,因为在推断类型时,TypeScript将变量“x”的类型推断为字符串,变量“y”的类型推断为数字。当我们尝试将y赋值给x时,编译器会生成一个错误,说明数字类型无法赋值给字符串类型。
最佳公共类型:类型推断
当没有显式的类型注解可用时,类型推断在类型检验中非常有用。在类型推断中,可能会存在一个对象用多个类型进行初始化的情况。
例如
let arr = [ 10, 20, null, 40 ];
在上面的例子中,我们有一个包含值10、20、null和30的数组。在这里,我们为数组提供了两种类型:数字和null。最佳公共类型算法会选择与所有类型兼容的类型,即数字和null。
再举个例子。
let arr2 = [ 10, 20, "JavaTpoint" ];
在上面的例子中,数组包含数字和字符串类型的值。现在,TypeScript编译器使用最常见的类型算法并选择与所有类型兼容的类型。在这种情况下,编译器将类型视为数组中所有类型的联合。这意味着该数组可以容纳字符串值或数值。
函数的返回类型也可以根据返回值进行推断。例如:
function sum(x: number, y: number )
{
return x + y;
}
let Addition: number = sum(10,20); // 正确
let str: string = sum(10,20); // 编译器错误
在上面的例子中,函数sum的返回类型为number。因此,其结果将存储在一个数字类型的变量中,而不是一个字符串类型的变量中。