什么是 TypeScript 中的类型断言
类型断言是TypeScript中的一种机制,它通知编译器变量的类型。如果TypeScript发现赋值是错误的,我们可以使用类型断言覆盖该类型。我们必须确定我们是正确的,因为当我们采用类型断言时,赋值总是合法的。如果不是,我们的程序可能无法正常运行。
声明性地告知编译器,我们打算将项目视为一个不同的类型,这被称为类型断言。利用这一点,我们可以把任何东西看作是一个数字,或者把数字看作是一个字符串。当把代码从JavaScript转移到TypeScript时,类型断言经常被使用。
类型断言的功能类似于类型转换,但与C#和Java不同,它不做类型验证或数据重排。运行时支持类型转换,尽管类型断言并不影响运行时。类型断言只是一个编译时的结构,给编译器指示我们希望我们的代码如何被检查。
在本教程中,我们将学习如何使用类型断言来告诉编译器将一个值视为指定的类型。
如何进行类型断言?
类型断言是一种Typescript技术,它告诉编译器变量的类型。尽管类型断言不会重新创建代码,但类型转换会。你可以通过使用类型断言告诉编译器不要推断一个值的类型。我们利用类型断言将一个变量从一种类型转换为另一种类型,例如将任意类型转换为数字。
为了进行类型断言,我们可以使用”<>”操作符或 “as “操作符。类型转换提供运行时支持,而类型断言对运行时没有影响。
在TypeScript中,有三种技术可以执行类型断言,它们是。
- 使用 “as “运算符
-
使用”<>”操作符
-
使用对象
使用 ” as ” 操作符进行类型断言
TypeScript中的 “as “关键字提供了一种显示Type Assertion的方法。
语法
let variable_any: any = 123
let variable_number: number = variable_any as number
在上面的语法中,我们在任何类型的变量上使用了 “as “关键字来进行类型断言。
示例
在下面的例子中,我们使用 “as “操作符进行类型断言。我们取了一个未知类型的变量,其值是 “Tutorialspoint”。我们使用 “as “关键字来告诉编译器将该变量视为字符串,并使用字符串的长度属性。
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);
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)
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的接口,它包含了这些类型,我们还对my_obj进行了控制台记录,以查看实际结果。
interface info {
name: string
value: string
}
let my_obj = <info>{}
my_obj.name = 'Tutorialspoint'
my_obj.value = 'typescript'
console.log(my_obj)
var my_obj = {};
my_obj.name = 'Tutorialspoint';
my_obj.value = 'typescript';
console.log(my_obj);
输出
上述代码将产生以下输出 —
{ name: 'Tutorialspoint', value: 'typescript' }