首页 > 其他分享 >typescript入门

typescript入门

时间:2023-01-30 18:56:00浏览次数:44  
标签:typescript return name number let const string 入门

js数据类型:

7种原始类型:Boolean Null Undefined Number Bigint String Symbol
Object 类型

let isDone: boolean = false
let num: number = 10
let str: string = `
num = ${num}
isDone = ${isDone}
`
let u: undefined = undefined
let n: null = null

// any 类型数据,就像js种变量。避免使用
let notSure: any = 4
notSure = 'sdsd'
notSure = true
notSure.fun()
notSure.attr

// 数组
let arrNum: number[] = [1,2,3]
let arrStr: string[] = ['1','2','3']

// array-like object,类似数组,但是没有 push pop 等操作
function test(param1:any) {
    // arguments 为ts内置的类数组
    console.log(arguments[0]);
    console.log(arguments.length);
}

// tuple
let user: [string, number] = ['name', 1]

接口

// 接口
interface Person {
    readonly id: number // 只读属性
    name: string
    age?: number   // 可选字段
}

let a: Person = {
    id: 1,
    name: 'aaaa',
    // age: 1,
}

函数

// 函数
interface AddFun {
    (x: number, y: number, z?:number):number
}

function fun(a:number, b:number = 0, c?:number) :number {
    if (typeof c === 'number') {
        return a + b + c
    } else {
        return a + b
    }
}

fun(1)
fun(1,1)
fun(1,2,2)

let f: AddFun = fun

联合类型 类型断言

// union types, 只能访问所有类型都拥有的属性或方法
let numOrStr : number|string
numOrStr = 'abc'
numOrStr = 1


// 类型断言,不是类型转化,将变量断言为联合类型中不存在类型会出错
function getLength(input: string|number) :number {
    const str = input as string
    if (str.length) {
        return str.length
    } else {
        const number = input as number
        return number.toString().length
    }
}
getLength(numOrStr)

// type guard
function getLength2(input: string|number) :number {
    if (typeof input === 'string') {
        return input.length
    } else {
        return input.toString().length
    }
}

Public 默认;Private ;Protected 子类允许访问
class Animal {
    readonly name: string;               // 在ts中类的属性在此声明,使用readonly声明为只读
    constructor(name: string) {
        this.name = name
    }
    protected run() {
        return `${this.name} is running`
    }
}
const snake = new Animal('aaa')
console.log(snake.run())              // 此处无法调用

class Dog extends Animal {
    static categories = ['Animal']
    constructor(name: string) {
        super(name)
        console.log(this.name)
    }
    bark() {
        return `${this.name} is barking`
    }
    run() {
        return `被重写:` + super.run()  // 此处可以访问
    }
}
const d = new Dog('ddd')
console.log(d.bark())
console.log(d.run())
console.log(Dog.categories)

接口与类

interface Radio {
    switchRadio(trigger: boolean): void;
}
interface Battery {
    switchBatteryStatus() : void;
}
interface RadioWithBattery extends Radio, Battery {
    checkBatteryStatus(): void;
}

class Car implements Radio {
    switchRadio(trigger: boolean): void {
    }
}

class Cellphone implements RadioWithBattery {
    checkBatteryStatus(): void {
    }
    switchRadio(trigger: boolean): void {
    }
    switchBatteryStatus(): void {
    }
}

枚举类
对于常量值,在 enum 前加上 const,开始内联,将所有使用枚举值的地方改为常量,提升性能

enum Direction {
    Up,        // 0
    Down = 10, // 10
    Left,      // 11
    Right,     // 12
}
console.log(Direction.Up) // 0
console.log(Direction[0]) // Up


enum Direction {
    Up = 'UP',
    Down = 'DOWN',
    Left = 'LEFT',
    Right = 'RIGHT',
}
if ('UP' === Direction.Up) {
    console.log('go up')
}

 泛型

function echo<T>(arg: T): T {
    return arg
}
let str = 'string'
let res = echo(str)
let resNum = echo(123)

function swap<T, U>(tuple: [T, U]): [U, T] {
    return [tuple[1], tuple[0]]
}
let t: [number, string] = [1, 'a']
let resTuple: [string, number] = swap(t)

// 泛型约束
interface IWithLength {
    length: number
}
function getLenth<T extends IWithLength>(arg: T): number {
    return arg.length
}
getLenth('123')
getLenth([1,2,3])
getLenth({'1':1, '2':2})

 泛型与类、接口

class Queue<T> {
    private data: T[] = [];
    push(item: T) {
        return this.data.push(item)
    }
    pop(): T|undefined {
        return this.data.shift()
    }
}

const q = new Queue<number>()
q.push(1)
q.push(2)
// q.push('12') // error
q.pop()
q.pop()

interface KeyPair<T, U> {
    key: T,
    value: U,
}
let kp1: KeyPair<string, number> = {key: '1', value: 1}

// 内置类型
let p1: Array<number> = [1,2,3]

类型别名,字面量 和 交叉类型

// 类型别名
type PluseType = (x: number, y: number) => number
let sumFun: PluseType

type int = number
type StrOrNum = string | number

// 类型为原始类型,
const str: 'name' = 'name'
const num: 1 = 1

// 字面量与类型别名组合
type Directions = 'Up'|'Down'|'Left'|'Right'
let toWhere: Directions = 'Left'

// 交叉类型
interface IName {
    name: string
}
type IPerson = IName & {age: number}
let person: IPerson = {name: '123', age: 123}

 声明文件

TS调用js库如jQuery,需要使用 declare var 声明变量已存在,然后直接使用。通常将声明语句放在一个单独的文件,如 jQuery.d.ts。可通过 npm install --save @types/jquery 安装jQuery的声明文件。

内置类型

在全局作用域存在的对象(ECMAscript,DOM等标准),

 

// global objects
const a: Array<number> = [1,2,3]
const data = new Date()
const reg: RegExp = /abc/


// build-in object
Math.pow(2,2)

// DOM and BOM
let body = document.body
let allLis = document.querySelectorAll('li')
document.addEventListener('click', (e)=>{
    e.preventDefault()
})

// Utility Types
// Ts提供的工具类 https://www.typescriptlang.org/docs/handbook/utility-types.html

 

标签:typescript,return,name,number,let,const,string,入门
From: https://www.cnblogs.com/zhh567/p/17076981.html

相关文章

  • JQuery概念以及快速入门
    JQuery概念概念:一个JAVAScript框架jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)。jQuery设计的宗旨是“writeLes......
  • drf入门规范
    drf入门规范web应用模式在开发web应用时有两种应用模式:前后端分离和前后端不分离前后端不分离在该模式下前端浏览器看到的所有页面都是由后端控制,前后端......
  • Django-rest-framework框架/1-drf-drf入门规范
    一、Web应用模式在开发Web应用中,有两种应用模式:1.1前后端不分离之前学的,写的bbs项目,图书管理系统,用的是前后端混合开发。-后端人员,写后端,也要写【模板语法】--->xx.h......
  • [Typescript 5.0] const Type Parameters with readonly
    https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/#exhaustive-switch-case-completions Intheexamplecode:typeHasNames={names:r......
  • drf从入门到精通(01)
    今日内容目录今日内容web应用模式nullAPI接口接口测试工具postmannullweb应用模式#djangoweb框架专门用来写web项目#之前学的,写的bbs项目,图书管理系统,用的......
  • python之路60 drf从入门到成神 1
    老刘讲课资料获取#个人博客:https,证书过期,忽略-https://www.liuqingzheng.top/#cnblogs博客(后期迁移到这里,高级部分的内容)-https://www.cnblogs.com/liuqin......
  • 超全 泛微 E9 Ecology 9开发资料大全 开源资源下载 泛微E9二次开发 泛微开发实战经验
    由于工作需要,E9在泛微一推出来,以前所在的企业就第一时间上线了,经过四年多的运行,功能强大再加上在上面开发非常多的业务,一般的企业员工只需要打开泛微就可以处......
  • drf从入门到精通---day01
    学习资料#个人博客:https,证书过期,忽略 -https://www.liuqingzheng.top/#cnblogs博客(后期迁移到这里,高级部分的内容) -https://www.cnblogs.com/liuqingzheng#知乎 ......
  • 会话技术Session快速入门与Session原理分析
    ##Session:1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession2.快速入门:1.获取HttpSession对象:......
  • Vue3+TypeScript 项目中,配置 ESLint 和 Prettier
    接上篇:从0搭建vite-vue3-ts项目框架:配置less+svg+pinia+vant+axios文档同步项目gitee:https://gitee.com/lixin_ajax/vue3-vite-ts-pinia-vant-less.git 一、Eslint:用于......