美文网首页
Typescript

Typescript

作者: key君 | 来源:发表于2019-10-23 17:52 被阅读0次

代码地址
https://github.com/iosKey/typescript
Typescript是js的超集,它可编译为纯js,是一种给js添加特性的语言扩展

已有项目安装ts

vue add @vue/typescript

image.png

基本使用
创建src/test.ts

//类型注解
let title1: string;
//只能赋值字符串
title1 = '不过如此';
//不允许
// title1 = 1;

//类型推论 编译器知道是字符串 也只能赋值z
let title2 = 'xx';
//不允许
// title2 = 1;

//数组类型
let names: string[];
//只能放字符串
names = ['tom'];//Array<string>

//任意类型
let foo: any;
foo = "xx";
foo = 1;

//any可以用于数组
let list: any[];
list = [1,true,"xx"];
list[1] = 100;

//函数中类型 前面是参数 后面是返回值类型
//带问号是可选参
function greeting(person: string,msg?: string): string{
    return "hi" + person;
}
greeting('niji');

function warnUser():void{
    alert('lll');
}

//常用类型:string number boolean void any object


//函数重载 先声明 再实现   可以多个声明 一次实现 实现得比较通用 传不同类型的参数 得到不同的结果
function info(a: {name: string}): string;
function info(a: string): {name: string};
function info(a: {name: string} | string): string | {name: string}{
    if(typeof a === 'object'){
        return a.name;
    }else{
        return {name: a};
    }
}



//类的特性
class MyComp{
    //声明属性
    private _foo: string = 'foo';//私有属性 内部使用
    protected bar: string;//受保护 派生类可以访问
    public zoo: string = 'zoo';//公共的
    //这样声明也可以
    constructor(barVal: string,private tua = 'tua'){
        this.bar = barVal;
    }
    //存取器
    get foo(){
        return this._foo;
    }
    set foo(val){
        this._foo = val;
    }
}

//继承 子类可以访问父类的foo属性的get set 还有public修饰的
class SubComp extends MyComp{
    //把父类的构造函数走一遍 传入规定的参数
    constructor(a: string){
        super(a);
        //内部可以访问protected修饰的
    }
}

const comp1 = new MyComp('barValue');
const comp2 = new SubComp('barValue2');
comp1.foo = 'aaa';


//泛型就是通用性 取名T 其实叫什么都可以
interface Result<T>{
    ok: 0 | 1;
    data: T;//代表动态性 可以是任意类型
}

//泛型方法
function getData<T>(): Result<T>{
    const data: any = [
        {id: 1, name: '1111', version: '2'},
        {id: 1, name: '1111', version: '2'}
    ];
    return {ok: 1, data}
}

//装饰器其实就一个function 简单实现一个装饰器
//类装饰器 传入的class 就是function构造函数
function log(target: Function){
    target.prototype.log = function(){
        // console.log(this.bar);
    }
}

//方法装饰器 参数3个
function dong(target: any, name: string, descriptor: any){
    const baz = descriptor.value;
    descriptor.value = function(val: string){
        baz.call(this,val);
    }
    return descriptor;
}

//属性装饰器
function mua(param: string){
    return function (target: any,name: string){
        target[name] = param;
    }
}

@log
class Foo{
    bar = 'bar'
    
    @mua('mua') ns!:string;

    log(){}

    @dong
    setBar(val: string){
        this.bar = val
    }
}
const foo2 = new Foo();
foo2.log();
foo2.setBar('lllllla');
// console.log(foo2.ns);


main.js引入

import './test.ts'

项目使用
安装 npm i axios -S

装饰器

装饰器用于扩展类或者它的属性和方法。@xxx就是装饰器的写法

相关文章

网友评论

      本文标题:Typescript

      本文链接:https://www.haomeiwen.com/subject/iojhvctx.html