JavaScript不限制变量的类型(注意,这里指的是变量的类型,而不是值的类型)。TypeScript与JavaScript相比增加了变量类型的声明,通过指定变量的类型来解决JS不易维护的问题。
TypeScript具有自动类型判断机制,当赋值的类型不符合变量类型时,TypeScript会报错。
方式一:声明变量后指定类型
let a:number //声明变量a,并指定其类型为number
a=10 //正确,赋值的类型与指定的变量类型相同
a='hello' //值为字符串类型,与指定的变量类型不符,会报错
方式二:声明变量后指定类型,同时赋值
let a:number=10 //声明变量a,并指定其类型为number,同时赋值为10
a=5 //正确,赋值类型与指定的变量类型相同
a='hello' //错误,赋值类型与指定的变量类型不相同
方式三:声明变量,同时赋值,但不指定变量类型
let a=10 //声明变量a,赋值为number类型,但没有指定变量的类型
a=5 //正确,赋值的类型与TS自动检测到的变量类型相符
a='hello' //错误,赋值的类型与TS自动检测到的变量类型不符
方式四:函数参数的类型和数量的指定
实际应用中造成困扰的往往不是变量的类型,而是函数参数的类型。JS中不考虑函数参数的类型和个数,但在TS中需要有明确的指定。
funtion sum(a:number,b:number){
return a+b
}//声明函数sum,其参数有a和b两个,都是number类型
sum(a:123,b:'456') //错误,参数b的类型与函数声明时指定的类型不符
sum(a:123,b:456,789) //错误,传了3个参数,与声明是指定的两个参数不符
方式五:函数返回值类型的指定
function sum(a:number,b:number):number{
return a+b
} //指定函数返回值的类型为number
function sum(a:number,b:number):number{
return a+'hello'
}//错误,实际返回值类型与指定的返回值类型不符