类型
boolean: 布尔类型;
array:数组类型;
string: 字符类型;
number:数字类型;
tuple:元组类型;
enum:枚举类型;
any:动态类型;
void:没有类型;
null:null类型;
undefined:undefined类型;
never:用不存在的值的类型;
object:非原始类型
原始类型
number,string,boolean,symbol,null,undefined
类型详述
number
和JavaScript一样,TypeScript里的所有数字都是浮点数。这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量
let num1:number = 99
let num2:number = 0xf00d
let num3:number = 0b11
let num4:number = 0o74
Array
let arr:object[] = [{},{},{}]
let arr1:Array<object> =[{},{},{}]
元组类型
已知数量和类型的数组
let sun:[string,number, boolean];
sun = ["do",10,false] //yes
sun = [10,"age",false] //no
当访问已知索引的元素,会得到一个确定的类型
console.log(sun[0].substring(1)) //ok
console.log(sun[1].substring(1)) //类型“number”上不存在属性“substring”。
当访问一个越界的元素,会通过联合类型来表示
sun[3] = "hello" // ok 字符串可以赋值为 string|number中的一个,编译会报错
sun[4] = false // ok 字符串可以赋值为 string|number中的一个,编译会报错
console.log(sun[5].toString()) //官网说可以但是实际操作不行
Any
为不清楚类型的变量指定一个类型,允许你在编译时可选择的包含或移除类型检查,Object只允许你进行赋值,而不允许你调用它的方法
let anything:any = 4
anything.ifItExists()
anything.toFixed()
let something :Object = 4
something.toFixed() //Property 'toFixed' does not exist on type 'Object'
Never
表示永不存在的类型,never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never
function error(message:string): never {
throw new Error(message)
}
function fial() {
return error("fail")
}
function infiniteLoop():never {
while(true){
}
}
类型断言
两种方式:
- 尖括号
let str = "this is a string" let length:number = (<string> str).length
- as关键字
let str = "this is a string" let length:number = (str as string).length