一.ts类型入门

布尔值,数字,字符串

在ts里面,布尔值,数字,字符串应该是最简单的几个基础类型了,他们的使用方法也与js基本无异,只是在书写上面有区别。

let name: string = "bob";
let num: number = 1
let flag: boolean = true

定义字符串时,我们依旧可以使用es6里面的模板字符串的方式进行定义和使用变量,使用方法与js无异。

数组

ts里面定义数组的方式有两种

//1.直接在元素上面后面接上[],表示此类元素组成一个数组
let arr1: number[] = [1,2,3]
//2.使用数组泛型
let arr2: Array<string> = ['1', '2', '3']

这里我们重点说下经常使用的对象数组,定义方式大同小异。

let arr1: object[] = [{name: 'fu'}]
let arr2: Array<object> = [{name: 'fu'}]

如果我们知道数组里面每个对象的结构,我们还可以这样定义:

let arr:{name: string, age: number}[] = [{name: 'fufu', age: 12}]

元组Tuple

元组表示的是一个已知类型和长度的数组

let arr1:[string, number] = ['1', 1]
let arr2:[string, number] = [1, '1'] // Error

获取里面元素时,直接使用下标就可以获取

arr1[0]  // '1'
arr1[1]  // 1

对于元组,不同的ts版本支持的特性也不一样,2.6之后的版本必须满足长度与类型完全一致才不会报错,之前的版本,越界元素(超出定义长度的元素,例如arr1[4])只要类型满足就不会有问题

枚举Enum

enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。类似于我们使用的数据字典。

enum Color {Red, Green, Blue}
//默认情况下,从0开始为元素编号
let color: Color = Color.Blue // 2

默认情况下元素的编号从0开始,我们也可以手动指定编号,指定编号的元素前面的元素依旧从0开始,之后的元素则从指定元素的编号 + 1开始

enum Color {Red = 1, Green, Blue}
let color: Color = Color .Blue // 3

enum Color {Red, Green = 5, Blue}
Color .Red // 0
Color .Green //5
Color .Blue //6

或者也可以全部采用手动赋值

enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;

很多使用我们需要根据下标获取到他的值

enum Color {Red, Green, Blue}
Color[1] // Green

枚举里面也是可以直接定义中文的,但是不推荐这么做,可能在打包编译的时候会出现问题

Any

很多时候,我们定义一个变量还并不清楚他将来会是一个什么数据类型,这个时候我们可以使用any进行类型定义,他表示该变量可能是任何类型。

我们来定义一个可能有任何类型的数组

let arr :any[] = [1, '2', false]

Void

从某种程度来说,他和any是相反的,他表示没有任何类型。当一个函数没有返回值的时候,他通常返回一个Void类型。

function warnUser(): void {
    console.log("This is my warning message");
}

当你声明了一个void类型的变量,那么他就只能被赋值为null和undefind了(在严格模式下甚至不能赋值为null)

let att1:void = null  // 非严格模式下ok
let att2:void = undefind  //ok
let att3:void = 1  //Error

Null 和 Undefined

默认情况下null和undefined是所有类型的子类型。 就是说你可以把 null和undefined赋值给number类型的变量。

let num:number = null  // ok
let str:string = undefined //ok

然而,当你指定了–strictNullChecks标记(ts配置文件里面的选项),null和undefined只能赋值给void和any类型。

Never

never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 这里的使用场景可能跟viod有点相似,区别在于viod只是我们没有手动返回,而Never是根本不可能返回(例如抛出错误或死循环)。

never类型是任何类型的子类型,也可以赋值给任何类型;但是没有任何类型可以赋值给never

Object

object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。

当我们希望一个变量或者函数的参数的类型是一个对象的时候,使用这个类型

let obj:object = {name: 'fufu'}
function getName(user:object) {}

注意:当我们直接使用obj.name的方式获取对象属性时,会提示属性不存在。这是因为TypeScript并不知道某一个object类型上面就有一个name的属性。我们有两种方式获取属性

//方式1  不进行object类型定义,让它自己推导
let obj = {name: 'fufu'}
obj.name  // 'fufu'
//方式2  使用接口interface
interface user{
  name: string
}
let obj1:user = {name: 'fufu'}
obj1.name  // 'fufu'

unknown

unknown类型是TypeScript在3.0版本新增的类型,它表示未知的类型,这样看来它貌似和any很像,但是还是有区别的,也就是所谓的“unknown相对于any是安全的”。

简单看下例子:

let value: any
console.log(value.name)
console.log(value.toFixed())
console.log(value.length)

上面这些语句都不会报错,因为value是any类型,所以后面三个操作都有合法的情况,当value是一个对象时,访问name属性是没问题的;当value是数值类型的时候,调用它的toFixed方法没问题;当value是字符串或数组时获取它的length属性是没问题的。

而当你指定值为unknown类型的时候,如果没有使用断言来指定类型是不能对它进行任何操作的。

let value:unknown = 'str'
value.length  //Error
//使用断言,下面是两种不同写法
(value as string).length
(<string>value).length
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值