📜  TypeScript类型推断

📅  最后修改于: 2021-01-11 12:24:52             🧑  作者: Mango

TypeScript类型推断

在TypeScript中,不必总是注释类型。当没有类型注释形式的显式信息可用时,TypeScript编译器将推断类型信息。

在TypeScript中,TypeScript编译器会在以下情况下推断类型信息:

  • 变量和成员被初始化
  • 设置参数的默认值
  • 确定的函数返回类型

例如

let x = 3;

在上面,变量“ x”的类型推断一个数字。在初始化变量和成员,设置参数默认值以及确定函数返回类型时,将进行类型推断。

让我们再举一个例子。

var x = "JavaTpoint";
var y = 501;
x = y; // Compile-time Error: Type 'number' is not assignable to type 'string'

在上面的示例中,我们得到一个错误,因为在推断类型时,TypeScript推断变量“ x”的类型为字符串,而变量“ y”的类型为数字。当我们尝试将y分配给x时,编译器会生成一个错误,指出数字类型不能分配给字符串类型。

最佳通用类型:类型推断

当没有显式类型注释可用时,类型推断有助于类型检查。在类型推断中,可能存在一种情况,可能会用多种类型初始化对象。

例如

let arr = [ 10, 20, null, 40 ];

在上面的示例中,我们有一个值为10、20,null和30的数组。在这里,我们为数组的类型提供了两种选择:number和null 。最好的通用类型算法选择一个与所有类型都兼容的算法,即数字和空值。

让我们再举一个例子。

let arr2 = [ 10, 20, "JavaTpoint" ];

在上面的示例中,数组包含number和字符串类型的值。现在,TypeScript编译器使用最常见的类型算法,并选择一种与所有类型兼容的算法。在这种情况下,编译器会将类型视为数组中所有类型的并集。在这里,类型将是(字符串或数字),这意味着数组可以容纳字符串值或数字值。

函数的返回类型还可以通过返回值来推断。例如:

function sum(x: number, y: number )
{
    return x + y;    
}
let Addition: number = sum(10,20); // Correct
let str: string = sum(10,20); // Compiler Error 

在上面的示例中,函数sum的返回类型为number 。因此,其结果将存储在数字类型变量中,而不是字符串类型变量中。