typescript

安装

npm init -y


npm i typescript --save-dev


创建文件

function run(name:string,age:number){
  console.log(name,age);
}

run("www",12);

运行

./node_modules/.bin/tsc demo01/first.ts

生成first.js

function run(name, age) {
    console.log(name, age);
}
run("www", 12);

运行

./node_modules/.bin/tsc -d demo01/first.ts

多生成一个first.d.ts

declare function run(name: string, age: number): void;


基础类型

//基础类型写法
let str:string = "wss";
let num:number = 123;
let bool:boolean = true;

let age = 12;

let str2:String = "leo";//字符串类类型

let str3:string = new String("wss");//error

let nul:null = undefined;

let und:undefined = null;

//数组
let arr:number[] = [];

// arr.push("str");error

let arr2:Array<string> = ["leo",undefined,"wws"];

// 元组
let tuple:[string,number] = ["wss",123];

tuple[2] = 111;
tuple[5]="ee";
// 为其他赋值只能是 string或number。
enum T2{
  A = "aaa",
  A2 = "ccc"

}

enum T3{
  
  A = 2,
  B,//会自动加1  3
  C//4
}

返回值

// any 任何类型
// void 什么都没有

function abc():void{

  return ;
  // return undefined;
  // return null;

}

function dfg():any{
  return 123;
  // return "qw";
  // return undefined;...

}
never 用法
//never

function err(msg:string):never{

  throw new Error(msg);
}

function run(name:string){
  if(name.length > 10){
    error("名字太长");
  }
}

//权限级别的修饰符
class User{
  //比js多一个定义属性 以及权限的修饰符
  private name:string;//只有自身可以访问
  // public age:number;
  public readonly age:number;//只读不可写
  protected group:string;//自身可以方问,以及子类可以访问

  constructor(name:string,age:number){
    this.name = name;
    this.age = age;
    this.group = "hhh";
  }

  private changename(){
    
  }



}


class People extends User{
  constructor(){
    super("default name",18);
    console.log(this.group);//子类可访问 受保护对象
  }
}

var user = new User("wss",18);
// user.name = 会出错,private为私有
// user.group error

export {User};

修饰器

//修饰器

function classD(target){
  console.log(target);//fuction:User

  target.prototype.abc = function(){
    console.log("abc");
}
}

@classD
class User{

}

var u:any = new User();
u.abc();

export {}//形成模块的封装

tsconfig.json增加

"experimentalDecorators":true
{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "dist",
        "noEmitOnError":true,
        "sourceMap": true,
        "declaration":false,
        "experimentalDecorators":true
    },
    "include": [
        "src/**/*"
    ],
    "exclude":[
      "node_modules"
    ]
}

    //方法修饰
function ppp(prototype:any,methodName:string,des:PropertyDescription){
  console.log(arguments);
  // 0:User{}
  // 1:abc
  // 2:{
  //   value:[function:abc]
  //   writable:true
  //   enumerable:false
  //   configurable:true
  // }


  des.writable = false;//更改后,方法不能被更改。不会打印 222

}


class User{


  @ppp
  abc(){
    console.log("111");
  }
}

var user = new User();
user.abc = function(){
  console.log("222");
}

// abc被改,打印222

    //属性修饰
function ppp(prototype:any,propname:string){
  console.log(arguments);
  // 0:User{}
  // 1:name
  if(!prototype.porpList){
  prototype.porpList = [];
}
  prototype.propList.push(propname);



}

// function addPropList(target){
//   target.prototype.propList = [];
// }


@addPropList
class User{
  @ppp
  private name:string;

  @ppp
  age:number;

  @ppp
  groutp:any;

  print(){
    let self:any = this;//转为any后,可以调用任意属性不会报错
    console.log(self.porpList);
  }

}


var u = new User();
u.print();

export{}

npm run build后

node ***.js



// 方法形参修饰器
//
// prototype 原型对象
// methodName 方法名
// index 参数索引位置



    //属性修饰
function ppp(prototype:any,propname:string){
  console.log(arguments);
  // 0:User{}
  // 1:name
  if(!prototype.porpList){
  prototype.porpList = [];
}
  prototype.propList.push(propname);



}

//方法形参候饰器
function argv(proto:any,methodName:string,index:number){
console.log(arguments);
// 0:User{propList:[name,age,group]},
// 1:myfun
// 2:1

  if(!proto.methodArgMap){
    proto.methodArgMap = {};

  }

  let map;
  if(!proto.methodArgMap[methodName]){
    proto.methodArgMap[methodName] = [];
  }

  map = proto.methodArgMap[methodName];

}



@addPropList
class User{
  @ppp
  private name:string;

  @ppp
  age:number;

  @ppp
  groutp:any;

  print(){
    let self:any = this;//转为any后,可以调用任意属性不会报错
    console.log(self.porpList);
  }

  myfun(a:string,@argv b:number){

  }

}


var u:any = new User();
u.print();
console.log(u.methodArgMap);

export{}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值