📜  解释 TypeScript 中的类型断言

📅  最后修改于: 2022-05-13 01:56:17.237000             🧑  作者: Mango

解释 TypeScript 中的类型断言

在 Typescript 中,类型断言是一种通知编译器变量类型的技术。类型断言类似于类型转换,但它不重构代码。您可以使用类型断言来指定值的类型并告诉编译器不要推断它。当我们想将变量从一种类型更改为另一种类型时,例如将任何类型更改为数字等,我们使用类型断言。

我们可以使用 <> 尖括号或作为关键字来进行类型断言。当我们将代码从打字稿迁移到另一种语言时,类型断言就起作用了。运行时支持伴随着类型转换,而类型断言对运行时没有影响。它由编译器使用。

示例 1:使用语法进行类型断言

在此示例中,我们将“geeksforgeeks”字符串分配给未知类型的变量。我们进一步将字符串的值赋给另一个变量并计算字符串的长度。在下面的代码中,我们使用“as”关键字断言 str 是 number 类型。

Javascript
let str: unknown = "geeksforgeeks";
console.log(str);
  
let len: number = (str as string).length;
console.log(len);


Javascript
let num: any = 77;
  
// Conversion from any to number
let num1 =  num;
  
console.log(num1);
console.log(typeof num1);


Javascript
interface details {}
details.first_name = "Sarah";
details.last_name = "jane";


Javascript
interface details {
    first_name: string;
    last_name: string;
}
  
let person_1 = 
{}; person_1.first_name = "Sarah"; person_1.last_name = "jane";    console.log(person_1);


输出:

geeksforgeeks
13

示例 2:使用 <> 尖括号语法的类型断言

这个例子和前面的例子类似,我们给一个any类型的变量赋值,然后把这个值赋给另一个变量,我们断言num变量的类型是“Number”。我们使用 <> 尖括号代替关键字。

Javascript

let num: any = 77;
  
// Conversion from any to number
let num1 =  num;
  
console.log(num1);
console.log(typeof num1);

输出:

77
number

示例 3:对象的类型断言

我们可能偶尔会遇到一个对象被定义时没有任何属性的情况。因此,编译器会抛出错误。但是,我们可以通过使用类型断言来防止这个问题。借助下面的例子,我们可以理解它。

Javascript

interface details {}
details.first_name = "Sarah";
details.last_name = "jane";

输出:

error TS2693: 'details' only refers to a type, but is being used as a value here.
details.first_name = "Sarah";

定义参数后,编译器不会抛出错误。编译器在前面的示例中引发错误,因为它无法在对象中找到任何属性。类型断言帮助我们解决此类错误。我们在细节上使用了类型断言。

Javascript

interface details {
    first_name: string;
    last_name: string;
}
  
let person_1 = 
{}; person_1.first_name = "Sarah"; person_1.last_name = "jane";    console.log(person_1);

输出:

{ first_name: 'Sarah', last_name: 'jane' }

参考: https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions