解释 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