TypeScript学习笔记

在这里推荐一个在线调试TypeScript的网站:TypeScript演练场
请添加图片描述

1.接口与对象类型

1.1对象类型

interface Person {
    name: string,
    age?: number,
    [propName: string]: any,
    cb(): number
}
const user: Person = {
    name: '张三',
    school: '某某中学',
    cb: () => {
        return 123
    }
}

console.log(user)

1.2接口继承

interface A {
    name: string
}
interface B extends A {
    age: number
}

let user: B = {
    name: '张三',
    age: 12
}

console.log(user)

2.数组类型

const arr: number[] = [123, 123]
const arr1: object[] = [{ name: 12 }]
const arr2: boolean[] = [true, false]
const arr3: number[][][] = [[], [], [[]],]
const arr4: any[] = [true, 1, '字符串']
const arr5: Array<number> = [1, 3]
const arr6: Array<Array<number | string>> = [[1, 3, 4, '可以是数字,也可以是字符串']]
// 无需主动声明
// interface IArguments {
//     [index: number]: any;
//     length: number;
//     callee: Function;
// }
function Arr(...args: any): void {
    let arr: IArguments = arguments
    console.log(arr)
}
Arr(4, 5, 6)

interface ArrNumber {
    [index: number]: string
}
const arr7: ArrNumber = ['张三', '李四', '王五']

3.函数类型

// 示例1
const fn = (name: string, age: number): string => {
    return name + age
}
console.log(fn('张三', 14))

// 示例2
const fn1 = (name: string, age?: number): string => {
    return name + age
}
console.log(fn1('张三'))

// 示例3
const fn2 = (name: string, age: number = 12): string => {
    return name + age
}
console.log(fn2('张三'))

// 示例4
interface User {
    name: string,
    age: number
}
const fn3 = function (user: User): User {
    return user
}
console.log(fn3({ name: '张三', age: 123 }))

3.1函数重载
重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。
如果参数类型不同,厕操作函数参数类型应设置为any。
参数数量不同你可以将不同的参数设置为可选

function fn(params: number): void
function fn(params: string, param2: number): void
function fn(params: any, params2?: any): any {
    console.log(params)
    console.log(params2)
}
fn(123) // 实现的是 function fn(params: number): void
fn('str', 123) // 实现的是 function fn(params: string, param2: number): void
fn('skk','123') // 实现的是方法3

4.联合类型|类型断言|交叉类型

let phone: number | string = '010-2022203' // 数字类型与字符串类型都可以
console.log(phone)
// 如果后端传给你的值是1 或者是 布尔值。而你需要的是布尔值可以用这种方式判断
function fn(type: number | boolean): boolean {
    return !!type
}
fn(1)
fn(true)
// 交叉类型
interface Pople {
    name: string,
    age: number
}
interface Gender {
    sex: string
}
const user1 = (data: Pople & Gender): void{
    console.log(user1)
}
user1({
    name: '张三',
    age: 18,
    sex: '男'
})

4.1类型断言

在这里插入图片描述

function fn(phone: number | string): void {
    console.log((phone as string).length)
}
fn('123')
interface A {
    run: string
}
interface B {
    build: string
}
let fn = (params: A | B):void => {
    console.log((params as A).run)
}
fn({ run:'123' });

(window as any).abc = 123

5.内置对象

const regexp: RegExp = /\w\d\s/
const date: Date = new Date()
const error: Error = new Error('错误')
const list: NodeList = document.querySelectorAll('#list li')
const str: String = new String('张三')
const body: HTMLElement = document.body
const div: HTMLDivElement = document.querySelector('div')
document.body.addEventListener('click', (e: MouseEvent) => {
    console.log(123)
})
function promise(): Promise<number> {
    return new Promise<number>((resolve, reject) => {
        resolve(1)
    })
}
promise().then(res => {
    console.log(res)
})

6.Class

class Person {
    name: string
    age: number
    sub: boolean
    constructor(name: string, age: number, sub: boolean) {
        this.name = name
        this.age = age
        this.sub = sub
    }
}
new Person('土豆', 22, false)

6.1修饰符

// public 外部可访问
// private 私有变量只能在类的内部访问
// protected 内部和子类中访问
// static 静态属性,可以直接通过类来访问
// 默认为public
class Person {
    name: string
    public age: number
    private sub: boolean
    static st: string = '我是静态属性'
    constructor(name: string, age: number, sub: boolean) {
        this.name = name
        this.age = age
        this.sub = sub
        Person.fn()
        // this.fn() 这句是行不通的
    }
    static fn() {
        // 静态方法里面仅能访问类中的静态属性
        this.st 
        return '我是静态方法'
    }
}
class Man extends Person {
    constructor() {
        super('土豆', 22, false)
        // sub是访问不到的
    }
}
const user = new Person('土豆', 22, false)
console.log(user.name)
console.log(user.age)
console.log(Person.st)
console.log(Person.fn())
interface Person {
    run(type: boolean): boolean
}
interface H {
    set(): void
}
class A {
    params: string
    constructor(params: string) {
        this.params = params
    }
}
class Man extends A implements Person, H {
    run(type: boolean): boolean {
        return type
    }
    set() {

    }
}

6.2抽象类

// 定义的抽象类的函数getName 必须在派生类B中实现
abstract class A {
    name: string
    constructor(name: string) {
        this.name = name
    }
    setName(name: string) {
        this.name = name
    }
    abstract getName(): string
}
class B extends A {
    constructor() {
        super('土豆')
    }
    getName() {
        return this.name
    }
}

let user = new B()
user.setName('土豆2')
console.log(user.getName())

7.元组类型

let arr: [string, number] = ['土豆', 26]
console.log(arr[0].length)

let arr2: [string, number] = ['土豆', 26]
// 仅能push string,number格式
arr2.push('土豆1', 27)
console.log(arr2)

let arr3: [string, string, number][] = [
    ['title', 'name', 1]
]

8.枚举类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值