美文共赏

TypeScript-02-类型

2021-12-14  本文已影响0人  JerrySi

1.六种类型

// ts非严格模式下, 类型都可以为null

const a: string = 'string'

// Infinity无穷大
const b: number = Infinity //NaN //123

const c: boolean = true

const d: null = null

const e: void = undefined

// 因为Symbol是es6, tsconfig使用的是es5
// 可以通过修改tsconfig.json里面lib标准库配置调整
const f: symbol = Symbol()

2.对象

// object 可以对象、数组、函数
const foo: object = function(){} //[] //{}

const foo1: {} = {foo: '1', value: '2', value1: 1}

const foo3: {foo: number, value: number} = {foo: 1, value: 2}

3.数组

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

4.元组

const tuple: [number, string] = [1, '']
const name = tuple[0]
const age = tuple[1]

const [name1, age1] = tuple

5.枚举

// 默认0开始
// 如果设置了一个值,后面值从这个数字累计
// 不加const,会生成一个双向键值对象
const enum Type {
    Type1 = 6,
    Type2,
    Type3,
}

enum StringType {
    Type1 = 'Type1',
    Type2 = 'Type2',
    Type3 = 'Type3',
}

6.函数

function sum(a: number, b?: number, ...args: number[]):number {
    return 10
}
sum(1)
sum(1,2)
sum(1,2,3)

const a: (a: number, b?: number | undefined, ...args: number[]) => number = function sum(a: number, b?: number, ...args: number[]):number {
    return 10
}

7.any

function stringify(value: any):string {
    return JSON.stringify(value)
}

8.推断

let a = 23
//a = ''

let b: any = 23
b = ''

let c
c = ''
c = 123

9.断言

const a = [1,2,3,4]
const r = a.find( i => i > 0)

// 断言
const result: number = r as number

// JSX下面会冲突,不能使用
const result1: number = <number>r  

10.接口

// 接口用于对对象进行限制
// 接口属性可以分号分割
// ?可选
// readonly只读
// [propName: string]支持key为string的数组
interface UserInfo {
    name: string
    age: number
    alias?: string
    readonly sex: string
} 

function foo(info: UserInfo) {
    console.log(info.age + info.name + info.sex + info.alias)
}

const userInfo: UserInfo = {
    name:'', 
    age:213,
    sex:'man',
}
userInfo.name = ''

// userInfo.sex = ''

foo(userInfo)


interface Cache {
    [friends: string]: string
} 
const cache: Cache = {
}
cache.a = ''
cache.b = ''
cache.c = ''

11.类

class Person {
    // ts中的成员属性,必须声明
    // 如果声明没有初始化,那么必须在构造函数中初始化

    // public:默认 外部可以使用
    // protected: 外部不能访问, 可继承, 而且可以一直继承下去
    // private: 外部不能访问, 不可继承

    // constructor添加了private, 可以通过静态方法强制使用者调用

    private name: string
    public age: number
    protected readonly gender: boolean = true

    constructor(name: string, age: number){
        this.name = name
        this.age = age
        this.gender = false
    }

    print():void {
        console.log(`I am ${this.name}`)
    }
}

12.类实现接口

interface Eat {
    eat(food: string):void
}
interface Run {
    run(distance: string):void
}

// 抽象类和抽象方法(和Android一样)
abstract class Animal implements Eat, Run {
    eat(food: string):void {

    }
    run(distance: string):void {

    }
    abstract jump(high: string): void
}

13.定义类型

import { camelCase } from 'lodash'

declare function camelCase(input: string) : string

const rse = camelCase('hello haha')

ts中类型声明的文件, 文件名格式:文件名.d.ts

上一篇下一篇

猜你喜欢

热点阅读