# 变量声明
变量使用前必须先声明,我们可以使用 var 来声明变量。
当然我们也可以用 let const ,不过typescript已经帮我们做了变量判断,就是你使用var 定义两个相同的变量,会报错提示你已经定义过了。
所以这里使用var 也是没啥问题的。习惯使用es6语法的同学,直接写let const也是好的。
下面我们使用四种方式来声明变量:
# 1、声明变量的类型及初始值:
var [变量名] : [类型] = 值;
const uname:string = "aliwang";
注意:变量不要使用 name
否则会与 DOM 中的全局 window 对象下的 name
属性出现了重名。
# 2、声明变量的类型,但没有初始值,变量值会设置为 undefined:
var [变量名] : [类型];
let uname:string;
# 3、声明变量并初始值,但不设置类型,该变量可以是任意类型:
var [变量名] = 值;
var uname = "aliwang";
# 4、声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型:
var [变量名];
let something;
something = 'seven';
something = 7;
something.setName('Tom'); // 这里ts编译不会报错,执行js会报错,就是原生js语法问题了
# TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误,如下实例:
const num:number = "hello" // 这个代码会编译错误
# 类型断言(Type Assertion)
类型断言可以用来手动改变一个值的类型,即允许变量从一种类型更改为另一种类型
。
语法格式: <类型>值
或 值 as 类型
var str = '1'
var str2:number = <number> <any> str //str、str2 是 string 类型
console.log(str2)
TypeScript 是怎么确定单个断言是否足够 当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言是危险的,如果你想这么做,你可以使用 any。
它之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。
编译后,以上代码会生成如下 JavaScript 代码:
var str = '1';
var str2 = str; //str、str2 是 string 类型
console.log(str2);