typescript基础入门

typescript是js的超集,使用了强类型让我们在编译阶段就能发现大部分错误,减少了比如拼错字母导致运行失败的问题TT,也会让我们的代码更整洁,可读性和维护性更高。下面我整理了一些ts的一些常规用法,供大家参考:

1. 基础类型

let isTrue: boolean = false
let price: number = 3
let name: string = 'zhangsan'

2. 数组:元素个数不确定

let arr: Array<number> = [1, 2, 3]
let arr: number[] = [1, 2, 3]

3. 元组:元素个数和类型确定的数组

let x: [string, number, number] = ['zhangsan', 12, 23]
x[3] = 'world' //当访问一个越界的元素,会使用联合类型替代、

4. 枚举:用于一些可数的变量,比如一个星期七天,或者订单的五种状态。

枚举跟普通的对象有些类似,可以给成员赋值(可以是非数字),优势在于可以通过枚举值去获得枚举名,也可反向通过名称获得枚举值,

enum Status {
    waitPay = 16,
    waitDelivery = 2,
    received,
}
let order: Status = Status.waitPay //16
let order1: Status = Status[2] // waitDelivery
// 如果赋值为数字可根据前一个枚举值向后递增
let order2: Status = Status.received // 3 

5. any:任意类型,有时候偷懒用用,尽量少用

let price: any = 10
let arr: any[] = [1, true, 'zhangsan']

6. void, undefined, null:使用较少,可以在联合类型中应用,比如一个值可能返回null或undefined

let table: void = undefined // 或null 函数没有返回值时使用
let u: undefined = undefined
let n: null = null

7. 联合类型:该变量可能是多种类型

let table: string | null | undefined

8. 类型断言:我理解的类型断言就是强制的类型转换,如下实例

两种写法:val as string 或 <string>val

// 函数的参数val可能有两个类型字符串或数字
function func(val: string | number): number {
    // 本意判断如果val不为空,返回val的长度,但是number类型是没有length属性的,所以在此处强制将val变为字符型,编译器就不会报错了
    if ((val as string).length) {
        return (val as string).length
    } else {
        return val.toString().length
    }
}

 9. interface(接口):定义了一个结构,包括属性和类型,之后所有相同结构的对象就可以用这个接口定义类型了,省去了挨个定义变量类型的步骤

接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在,使用?可选属性,使接口更通用

interface Feature {
    id?: number
    name: string
}
let features: Feature = {
  id: 1,
  name: 'zhangsan',
}

10. 类型交叉:与可选属性功能相反用于扩充接口,目的都是使接口更通用

虽然有了接口,但是大部分的结构不可能一摸一样,比如9中的例子可能会多个select:Boolean,如果没有类型交叉,这些不同的接口需要重新自已定义,类型交叉就是在原来的接口上补充,以满足不同结构的需求

type FeatureSelect = Feature & {
    select:Boolean
}

11. 类型别名(与 interface相似)使用更灵活

type Feature = {
    id: number
    name: string
}
let features: Feature = {
  id: 1,
  name: 'zhangsan',
}

12. 泛型:类似于函数封装的原理,可以为(接口,类,函数)等封装类型,然后以参数的形式传类型值,如下<T>表示需要传的类型可以是string,也可以是number等其它类型

type Feature<T> = {
    id: number
    data: T
}
let features: Feature<string> = {
    id: 1,
    data: 'zhangsan',
}
let features1: Feature<number> = {
    id: 1,
    data: 123,
}

13. 函数:需要定义参数值和返回值的类型

function greeting(person: string): string {
        return 'Hello, ' + person
}

14. 可选参数:该参数可以不传

function greeting(person: string, msg?: string): string {
        return 'Hello, ' + person
}

15. 装饰器@

假如我们点一杯奶茶,装饰器相当于小料,我们可以为奶茶添加椰果、啵啵、布丁、红豆,一种小料就是一个装饰器可以随意搭配,如下实例中@Path就是一个装饰器,为HelloService类添加了一个额外功能

function Path(target:any) {
    console.log("I am decorator.")
}

@Path
class HelloService {}

//装饰器本身其实就是一个函数,可以为原有函数附加一个功能
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值