《TypeScript初识》

简介: TypeScript一些基础语法

安装编译

  1. 安装

    npm install -g typescript
  2. 编译

    tsc 文件名.ts

配置自动编译

有构建工具( webpack等)会自动构建
  1. 在项目目录中运行命令,生成ts配置文件 tsconfig.json

    tsc --init
  2. 打开 tsconfig.json, 修改输出的目录

    "outDir": "./js"
  3. 窗口选择 终端 --> 运行任务 --> 显示所有任务 --> tsc:监视

数据类型和效验

必须指定变量的类型
  • boolean 布尔类型

    var flag:boolean = true // 指定布尔类型
  • number 数字类型
  • string 字符串类型
  • array 数组类型

    // 数据中的元素必须是number类型
    const abc:number[] = [1,21]
    
    const arr:Array<number> = [11,22]
  • nullundefined

    var num:undefined;
    
    // 可以为number或者undefined
    var num:number | undefined;
  • enum 枚举类型

    // 枚举类型
    /**
     * enum 枚举名 {
     *      标识符[=整型常数]
     *      标识符[=整型常数]
     * }
    */
    // 如果标识符没有赋值则打印下标
    enum Flag {success=1,error=2}
    
    let s:Flag = Flag.success
  • tuple 元组类型,数组的一种

    // 表示第一项为number,第二项为string
    const arrTuple:[number,string] = [123,'字符串']
  • any 任意类型

    var num:any = 123
  • void

    // 没有任何类型 用于定义方法 方法没有返回值
    function run():void{}
  • never

    // 其他类型 包含(null和undefined) 代表从不会出现的值
    var a:undefined;
    a=undefined // a 只能等于undefined
    var a:never;
    // 从不会出现的值
    a = (()=>{
       throw new Errorr('错误') 
    })()

函数的定义

  1. 函数声明

    function run():string {
        return '字符串'
    }
  2. 匿名函数

    var fun2 = function():number {
        return 123
    }
    
    fun2() // 调用方法
  3. 定义方法传参

    function getInfo(name:string, age:number):string{
        return name
    }
  4. 没有返回值的方法

    function run():void {
    }
  5. 可选参数方法

    ts形参实参需要统一,如果不同意需要在参数后面加上 ?
    function getInfo(name:string, age?:number):string{
        return name
    }
  6. 默认参数

    function getInfo(name:string, age:number=20):string{
        return name
    }
  7. 剩余参数

    function sum (...data:number) { // 剩余参数每一项都是number
        
    }
  8. 函数重载

    java中方法的重载:两个或两个以上同名函数,但是他们参数不一样,这时会出现重载的情况

    typescript重载:通过为同一个函数提供多个函数类型定义来试下多种功能的目的

    ts为了兼容es5 以及 es6 重载的写法有区别

    function getInfo(name:string):string;
    function getInfo(age:number):number;
    function getInfo(str:any):any {
        if(typeof str === 'string'){ // 匹配为字符串
            return str
        } else { // 匹配为数字
            return str
        }
    }

对类的定义

  1. 定义一个类

    class Person{
        private name:string
        constructor(name:string) {
            this.name = name
        }
        getName():string{
            return this.name
        }
        setName(name:string):void{
            this.name = name
        }
    }
    var p = new Person('张三')
    p.getName
  2. 继承

    class extends Person {
        constructor(name:string){
            super(name) // 传入name给父级 初始化父类的构造函数
        }
    }
  3. 类的修饰符

    不加修饰符,默认就是公有
    • public:公有 都可以访问
    • protected:在类里面、子类可以访问,类外部不行
    • private:私有 只有类里面可以访问
  4. 多态

    父类定义一个方法不去实现,让继承他的子类去实现,每一个子类有不同的表现
    class Animal {
        name:string;
        custructor(name:string) {
            this.name = name
        }
        eat() {
            console.log('吃的什么');
            
        }
    }
    
    class Dog extends Animal {
        custructor(name:string) {
            super(name)
        }
        eat () {
            return this.name + '吃饼干'
        }
    }
  5. typescript中的抽象类,它是提供其他类继承的基类,不能直接被实例化

    abstract 抽象方法只能放在抽象类中 抽象类中所有的东西都是抽象的

    abstract class Animal {
        abstract eat():ant; // 它的子类必须包含eact方法
    }

泛型

可以支持不特定的数据类型 要求:传入的参数和返回的参数一致
  1. 泛型函数

    function getData<T>(value:T):T { // T表示泛型,传入的是泛型,返回的也是泛型
        return 'abc'
    }
    getData<number>(123)
  2. 泛型类

    class MinClass<T> {
        list:T[] = []
    }
    var m = new MinClass<number>()
  3. 泛型接口

    interface ConfigFn {
        <T>(value:T):T
    }
    var getData:ConfigFn = function<T>(value:T):T{
        return value
    }

装饰器

  1. 普通装饰器

    function logClass(params:any) {
        // params 就是当前类 
        // 给当前类扩展一个 变量
        params.prototype.apiUrl = 'xxx'
        
        // 扩展一个方法
        params.prototype.run = function() {
            
        }
    }
    
    @logClass // 调用logClass装饰器
    class  HttpClient {
        constructor() {
            
        }
    }
    var http = new HttpClient()
    http.apiUrl // 调用扩展的变量
  2. 装饰器工厂

    function logClass(params:string){
        return function(target:any){
            
        }
    }
    @logClass('hello') // 把hello传给params HttpClent传给target
    class HttpClient{
        constructor() {}
    }
  3. 在装饰器中修改传入类的数据

    function logClass(target:any){
        return class extends target{ // 继承传入的类后进行修改
            apiUrl:any = "修改后的apiUrl"
        }
    }
    
    @logClass
    class HttpClent {
        public apiUrl:string|undefined
        constructor(){
            this.apiUrl = '我是构造函数里面的'
        }
    }
  4. 属性装饰器

    function logProperty(params:any){
        return function(target:any,attr:any) {
           //target 类的原型对象  attr:属性名称
            target[attr] = params // 表示把类的属性赋值传入进来的params
        }
    }
        
    class HttpClient{
        @logProperty('abc')
        public url:any
    }
  5. 方法装饰器

    function logMethod(params:any){
        return function (target:any,methodName:any,desc:any){
            
        }
    }
    class HttpClient{
        @logProperty('params参数')
        getData() {}
    }
    • target对于静态成员来说是类的构造函数,对于实例成员来说是原型对象
    • methodName成员的名字
    • desc 成员对应的参数
  6. 方法参数装饰器

    function loParams(params:any) {
        return function (target:any,paramsName:any,paramsIndex:any){
            
        }
    }
    
    class HttpClient{
        public url:any
        constructor() {}
        getData(@logParams('params参数')){}
    }
    • target 对于静态成员来说是类的构造函数,对于实例成员来说是原型对象
    • paramsName 参数的名字
    • paramsIndex 参数在函数列表中的索引

    本文为作者原创笔记~,喜欢记得给作者点赞、转发支持一下哦~,转载请注明出处!

相关文章
|
6月前
|
JavaScript 前端开发 安全
TypeScript五
TypeScript是面向对象的JavaScript超集,支持类、接口等OOP特性。类通过`class`定义,包括字段、构造函数和方法。例如,`Car`类有`engine`字段、构造函数和`disp`方法。类间可实现继承,如`Circle`继承`Shape`。TypeScript不支持多重继承,但允许多重继承链。`static`关键字定义静态成员,`instanceof`检查对象类型,访问控制修饰符(public, protected, private)管理访问权限。类能实现接口,如`AgriLoan`实现`ILoan`。 TypeScript对象是类型实例,
|
30天前
|
JavaScript 安全
TypeScript使用真的很麻烦吗?
TypeScript使用真的很麻烦吗?
26 3
|
6月前
|
存储 JavaScript
TypeScript三
在 TypeScript 中,数组可以通过类型定义,如 `number[]` 或 `string[]`。示例展示了数字和字符串数组的声明与访问。数组解构允许将数组元素赋值给多个变量。通过 `for...in` 循环可遍历数组。多维数组如 `number[][]` 存储嵌套数组。数组方法包括:`concat()` 连接数组,`every()` 检查所有元素是否满足条件,`filter()` 过滤符合条件的元素,`forEach()` 对每个元素执行回调,`indexOf()` 查找元素位置,`join()` 将数组转为字符串,`map()` 应用函数于每个元素并返回新数组
|
6月前
|
JavaScript 前端开发 开发者
TypeScript一
JavaScript开发迅速但维护成本高,适合小型项目,因其动态类型导致编辑器提示不全。TypeScript是JS超集,增加了类型系统,提高开发效率和代码质量。安装TypeScript需先安装Node.js,然后通过npm安装tsc。案例演示创建`.ts`文件,转换成`.js`并运行。TypeScript支持多种数据类型,如any、number、string等,并有严格变量声明和函数定义规则,包括函数重载和匿名函数。
|
6月前
|
JavaScript 前端开发
TypeScript二
JavaScript Number对象包含多种方法,如`toExponential()`将数值转化为指数形式,`toFixed()`保留指定位数的小数,`toLocaleString()`按本地格式显示数字,`toPrecision()`格式化数字到指定长度,`toString()`以指定基数表示数字,而`valueOf()`返回原始数值。此外,示例中还展示了Date对象的格式化方法。对于String对象,有`constructor`返回创建对象的函数,`length`获取字符串长度,`prototype`用于扩展对象,以及一系列如`charAt()`、`indexOf()
|
6月前
|
开发框架 JavaScript 前端开发
什么是TypeScript
什么是TypeScript
32 0
|
JSON JavaScript 前端开发
Typescript知识总结(1)
Typescript知识总结(1)
Typescript知识总结(1)
|
JavaScript 前端开发
初识 TypeScript 二。
初识 TypeScript 二。
初识 TypeScript 二。
|
JavaScript
初识 TypeScript 一。
初识 TypeScript 一。
初识 TypeScript 一。
|
JavaScript 前端开发 开发工具
TypeScript初识
TypeScript初识
146 0