ts的基本数据类型
ts的基本数据类型
1.布尔 boolean true/false
let isDone:boolean = false
2.数字 ts⾥数字都是浮点数 number ⼗进制⼗六进制⼆进制⼋进制
3.字符串
形式1:引号 ' "" 和js⼀样 let name:string='bb'+myName
形式2:模板字符串(多⾏⽂本和内嵌表达式) ` ${} let name:string= `我的名字是${myName}`
4.数组
形式1:在元素类型后⾯接上[],表⽰由此类型元素组成的⼀个数组:let list:number[] = [1,2,3]
形式2:使⽤数组泛型,Array<;元素类型> let list:Array<number> = [1,2,3]
定义时的元素类型和赋值时要⼀致,否则会报错
5.元组 Tuple
元组类型允许表⽰⼀个已知元素数量和类型的数组,各元素的类型不必相同可以定义⼀对值分别为string\number类型的元组
注意:1)定义时的类型顺序和赋值时应⼀致,不然会报错
2)当访问⼀个已知索引的元素,会得到正确的类型
3)当访问⼀个越界的元素,会使⽤联合类型替代
注意:在 Typescript 2.7 Tuple 的定义已经变成了有限制长度的数组不能再越界访问了官⽅⽂档没更新
push可以成功,访问数组也能看到这个元素,但是通过索引取不了
索引不能获取是静态检查不让你获取⽽已,实际上运⾏时还是能的。静态检查对运⾏时不会有任何影响。
typescript的静态类型并不属于强类型,就算声明约束为长度2的数组,它仍然可以push,因为它始终还
是js。
所以typescript能做的就是在你尽管对数组的操作超越了约束,它还是限制你继续在约束范围外进⾏其他操作。
let x: [string, number]
x = ['hi', 10] //(2) ["hi", 10]
x = [10, 'jjj'] //error TS2322: Type 'number' is not assignable to type 'string'.
console.log('----', x[0].substr(1)) //i substr(start,length) 如果第⼆个参数没传,默认到最后
console.log(x[1].substr(1)) //类型“number”上不存在属性“substr”
6.枚举 enum类型是js标准数据类型的⼀个补充
1)使⽤枚举类型可以为⼀组数值赋予友好的名字
2)默认情况下,从0开始为元素编号,也可以⼿动指定成员的数值
enum Color { Red = 1, Green = 2, Blue = 3,}
3)可以由枚举的值得到它的名字这⾥限定数据类型是你前⾯定义的那个
let c: Color = Color.Green //结果是值
4)知道值可以以查到映射对应的名字这⾥要限定数据类型是string,等号右边的值是字符串js的基本数据类型
let e: Color = Color[3] //不能将类型“string”分配给类型“Color”。
let d: string = Color[3]//Blue
enum Color { Red = 1, Green = 2, Blue = 3,}
let c: Color = Color.Green
console.log(c) //2
// let e: Color = Color[3] //不能将类型“string”分配给类型“Color”。
let d: string = Color[3]
console.log(d) //blue
7.Any
为在编程阶段还不清楚类型的变量指定⼀个类型(值可能来⾃于动态的内容第三⽅代码库、⽤户输⼊)
不希望类型检查器对这些值进⾏检查⽽是直接让它们通过编译阶段的检查=》⽤any类型标记该变量
1)不知道变量是什么数据类型
let notSure: any = 4
console.log(notSure) //4
notSure = 'hhhhhhhhh'
console.log(notSure) //hhhhhhhhh
notSure = false
console.log(notSure) //false
2)改写现有代码
允许在编译时可选择的包含或移除类型检查 object类型的变量只允许给它赋任意值但不能在它上⾯调⽤任意的⽅法即使它真的有这些⽅法 let notSure: any = 4
notSure.ifItExisits() //浏览器报错了,vscode没有 jc1.js:179 Uncaught TypeError: notSure.ifItExisits is not a function
let prettySure: Object = 4
3)只知道部分数据的类型时⽐如数值包含不同类型的数据
let list: any[] = [1, true, 'free']
list[1] = 100 //vs没报错没指定数值元素的数据类型
8.Void
void类型与any类型相反,表⽰没有任何类型
1) 当⼀个函数没有返回值时,其返回值类型是void
function warnUser(): void {
console.log('message')
}
2)声明⼀个void类型的变量没有⼤⽤,只能赋值为undefined null
let unusable: void = undefined
let unusable0: void = null
let unusable1: void = 1 //不能将类型“number”分配给类型“void”。
let unusable2: void = [1, 2] //不能将类型“number[]”分配给类型“void”。
9.null\undefined
1.默认情况下null和undefined是所有类型的⼦类型,就是说你可以把null undefined赋值给number类的变量
2.如果指定了 --strictNullChecks标记,null\undefined只能赋值给void和它们各⾃
如果想传⼀个string null 或undefined,可以使⽤【联合类型】string|null|undefined
let u:undefined = undefined;
let:null = null;
10.Never
1)表⽰永不存在的值的类型
--never类型是那些总是会抛出异常或者根本就不会有返回值的函数表达式或箭头函数表达式的返回值的类型
--变量也可能是never类型,当它们被永不为真的类型保护所约束时
2)never类型是任何类型的⼦类型,也可以赋值给任何类型
但是,只有never可以赋值给never 没有类型是never的⼦类型或可以赋值给never类型(除了never本⾝之外),any也不可以赋值给never // 返回never的函数必须存在⽆法达到的终点
function error(message: string): never {
throw new Error(message)
}
// 推断的返回值类型为never
function fail() {
return error('Something failed')
}
// 返回never的函数必须存在⽆法达到的终点死循环
function infiniteLoop(): never {
while (true) {}
}
11.object
表⽰⾮原始类型,除number string boolean symbol null undefined之外的类型
使⽤object类型可以更好的表⽰像ate这样的API
declare function create(o: object | null): void
create({ prop: 0 })
create(null)
// create(3) //类型“number”的参数不能赋给类型“object”的参数。
// create('string') // Error
// create(false) // Error
//和⽂档例⼦不同
create(undefined) // 默认情况下null和undefined是所有类型的⼦类型
类型断⾔
-只在编译阶段起作⽤ ts会假设你已经进⾏了必须的检查
形式1:尖括号语法
let someValue:any = "hihi";
let strLength:number = (<string>someValue).length
形式2: as语法在ts⾥使⽤JSX时,只允许as语法断⾔
let someValue:any = 'hhhhh';
let strLength:number = (someValue as string).length;
关于let
⽤let代替var
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论