TypeScript中的类型断言是什么?
类型断言是TypeScript中一种机制,用于告知编译器变量的类型。如果TypeScript发现赋值错误,我们可以使用类型断言来覆盖类型。我们必须确定自己是正确的,因为当我们使用类型断言时,赋值总是合法的。如果不是,我们的程序可能无法正常运行。
声明性地告知编译器我们打算将项目视为不同类型被称为类型断言。使用它,我们可以将任何类型视为数字或将数字视为字符串。从JavaScript迁移到TypeScript时,经常使用类型断言。
类型断言的功能类似于类型转换,但与C#和Java不同,它不执行类型验证或数据重排。类型转换提供运行时支持,而类型断言不影响运行时。类型断言仅是编译时构造,用于向编译器提供关于我们希望如何检查代码的指示。
在本教程中,我们将学习如何使用类型断言来告诉编译器将值视为指定类型。
如何进行类型断言?
类型断言是一种TypeScript技术,它告诉编译器变量的类型。虽然类型断言不会重新创建代码,但类型转换会。您可以使用类型断言告诉编译器不要推断值的类型。我们使用类型断言将变量从一种类型转换为另一种类型,例如将any转换为数字。
要进行类型断言,我们可以使用“<>”运算符或“as”运算符。类型转换提供运行时支持,而类型断言对运行时没有影响。
在TypeScript中执行类型断言有三种方法:
使用“as”运算符
使用“<>”运算符
使用对象
使用“as”运算符进行类型断言
TypeScript中的“as”关键字提供了一种显示类型断言的方法。
语法
let variable_any: any = 123 let variable_number: number = variable_any as number
在上面的语法中,我们对任何类型的变量使用了“as”关键字进行类型断言。
示例
在下面的示例中,我们使用“as”运算符进行类型断言。我们使用了一个未知类型变量,其值为“Tutorialspoint”。我们使用“as”关键字告诉编译器将变量视为字符串,并使用了字符串的length属性。
let variable_unknown: unknown = "Tutorialspoint"; console.log("variable_unknown value is: ", variable_unknown); let variable_number: number = (variable_unknown as string).length; console.log("Length of variable_unknown: ", variable_number);
编译后,它将生成以下JavaScript代码:
var variable_unknown = "Tutorialspoint"; console.log("variable_unknown value is: ", variable_unknown); var variable_number = variable_unknown.length; console.log("Length of variable_unknown: ", variable_number);
输出
上面的代码将产生以下输出:
variable_unknown value is: Tutorialspoint Length of variable_unknown: 14
使用“<>”运算符进行类型断言
“<>”运算符是另一种在TypeScript中执行类型断言的方法。
语法
let variable_any: any = 123 let variable_number: number = <number> variable_any
在上面的语法中,我们对任何类型的变量使用了“<>”运算符进行类型断言。
示例
在下面的示例中,我们使用“<>”运算符进行类型断言。我们使用了一个未知类型变量,其值为12345。我们使用“<>”关键字告诉编译器将变量视为数字,并将其存储在另一个数字类型变量中。我们还检查了第二个变量的类型以验证类型。
let my_number: unknown = 12345 console.log('my_number value is: ', my_number) let num: number = <number>my_number console.log('typeof num is: ', typeof num)
编译后,它将生成以下JavaScript代码:
var my_number = 12345; console.log('my_number value is: ', my_number); var num = my_number; console.log('typeof num is: ', typeof num);
输出
上面的代码将产生以下输出:
my_number value is: 12345 typeof num is: number
使用“Object”进行类型断言
与“as”和“<>”运算符不同,对象是另一种执行类型断言的方法;对象可以一次用于多个类型断言。
语法
interface info { name: string, value: string } let my_obj = <info> { name: 'ABC', value: 'abc'}
在上面的语法中,我们使用对象执行类型断言。
示例
在下面的示例中,我们使用对象进行类型断言。我们使用了一个对象,并将每个键设置为单独的类型,因此每当用户向其中添加一些值时,它将自动成为给定的值类型或抛出错误。my_obj 使用名为 info 的接口包含类型,我们还使用 console.log(my_obj) 来查看实际结果。
interface info { name: string value: string } let my_obj = <info>{} my_obj.name = 'Tutorialspoint' my_obj.value = 'typescript' console.log(my_obj)
编译后,它将生成以下JavaScript代码:
var my_obj = {}; my_obj.name = 'Tutorialspoint'; my_obj.value = 'typescript'; console.log(my_obj);
输出
上面的代码将产生以下输出:
{ name: 'Tutorialspoint', value: 'typescript' }