Typescript基础

本文介绍了TypeScript的基础知识,包括其编译过程、数据类型、函数类型、接口、面向对象特性和泛型的使用。讲解了如何通过`tsc`进行编译,以及变量、数组、函数和接口的类型定义。同时,提到了访问修饰符和泛型在 TypeScript 中的应用,帮助读者理解这门强类型、面向对象的语言。
摘要由CSDN通过智能技术生成

1 概述

官网:typescriptlang.org

特点:编译型语言;强类型语言;真正的面向对象语言(有接口、有泛型、有访问修饰符)

安装:

npm install -g typescript

atom-typescript

 

2 编译

tsc xxx.ts只编译不执行

有三种扩展名可选:.ts   .tsx   .d.ts

 

3 数据类型

有类型的script

var a:类型;

①基本类型:number  string  boolean  symbol  void   null   undefined   enum  any

1 void-空 一般用作返回值,如果赋值会报错

2 null、undefined:null-null   undefined-undefined

3 enum(枚举):有限的可能性,比如性别,星期

4 变体变量any:变体变量就是js原本的变量 

5 类型推测(隐式类型声明):根据初始化值来推测类型

6 冲突检测:编译器会自动的排除掉无用的选项

7 联合类型:var g:number|string;

8 数组类型:var arr=[12,5,8];  等价于var arr:number[]=[12,5,8];

②联合类型var g:number|string;

③函数签名

④复合类型

var a:number;
a=12;

var b:void;
// b=12;

var c:null;
// c=12;

enum gender{
  male,female
}
var sex:gender;
sex=gender.male;

var d:any;
d=12;
d='abc';

//类型推测
var e;//等价于 var e:any;
var f=12;//等价于 var f:number=12;

//冲突检测
enum week{
  sunday,
  monday,
  thursday
}
var w;
switch(w){
  case week.sunday:
    break;
  case week.monday:
    break;
  case week.thursday:
    break;
}

//联合类型
var g:number|string;
//g=12;
//g='abc';

var h:boolean;
g=h?12:'abc';
//g=h?12:false; 报错,因为g不会成为布尔

var arr=[12,5,8];//等价于var arr:number[]=[12,5,8];
//arr[3]='abc';
var arr1=[12,'abc',false];

 编译之后的js

var a;
a = 12;
var b;
// b=12;
var c;
// c=12;
var gender;
(function (gender) {
    gender[gender["male"] = 0] = "male";
    gender[gender["female"] = 1] = "female";
})(gender || (gender = {}));
var sex;
sex = gender.male;
var d;
d = 12;
d = 'abc';
//类型推测
var e; //等价于 var e:any;
var f = 12; //等价于 var f:number=12;
//冲突检测
var week;
(function (week) {
    week[week["sunday"] = 0] = "sunday";
    week[week["monday"] = 1] = "monday";
    week[week["thursday"] = 2] = "thursday";
})(week || (week = {}));
var w;
switch (w) {
    case week.sunday:
        break;
    case week.monday:
        break;
    case week.thursday:
        break;
}
//联合类型
var g;
//g=12;
//g='abc';
var h;
g = h ? 12 : 'abc';
//g=h?12:false; 报错,因为g不会成为布尔
var arr = [12, 5, 8]; //等价于var arr:number[]=[12,5,8];
//arr[3]='abc';
var arr1 = [12, 'abc', false];

 

4 函数类型

   A:参数

        有类型

        签名检查--个数、类型得对

   B:返回值

        基本类型

        联合类型

        函数签名

        对象类型(复合类型)  var a:{x:number,y:number,z?:number};

外部声明变量
declare var $;

//函数参数类型
function show(a:number,b:number){
  console.log(a+b)
}
show(12,5);
//show('12',5);报错
//show(12);报错
//show(12,5,6);报错

//外部声明变量
declare var $;//不加这个会报错
$(function(){
  $('#div1').css('width','200px')
})

//以下这些都不用声明,因为ts已经自己声明了,还有很多
window.onload=function(){
  document.getElementById('div1').onclick=function(){
      alert('abc');
      //var page=Rapheal(0,0,400,300);
  }
}

//函数返回值类型
function sum(a:number,b:number):number{
    return a+b;

    // var c:boolean;
    // if(c){
    //   return 12;
    // }else{
    //   return 'abc';
    // }
}
console.log(sum(12,5));

//函数签名
function ajax(url:string,success:(res:string,code:number)=>void,
  error:(code:number)=>void){
  ;
}
ajax(
  '1.txt',
  function (str:string,code:number){

  },
  function (code:number){

  }
);

//复合类型
var a:{x:number,y:number,z?:number};
//下边这两种都可以
a={x:12,y:5};
a={x:12,y:5,z:99};

//可选参数跟复合类型差不多
function sum1(a:number,b:number,c?:number){
  return a+b;
}
sum1(1,2);
sum1(1,2,3);

编译之后的js

//函数参数类型
function show(a, b) {
    console.log(a + b);
}
show(12, 5);
$(function () {
    $('#div1').css('width', '200px');
});
//以下这些都不用声明,因为ts已经自己声明了,还有很多
window.onload = function () {
    document.getElementById('div1').onclick = function () {
        alert('abc');
        //var page=Rapheal(0,0,400,300);
    };
};
//函数返回值类型
function sum(a, b) {
    return a + b;
    // var c:boolean;
    // if(c){
    //   return 12;
    // }else{
    //   return 'abc';
    // }
}
console.log(sum(12, 5));
//函数签名
function ajax(url, success, error) {
    ;
}
ajax('1.txt', function (str, code) {
}, function (code) {
});
//复合类型
var a;
//下边这两种都可以
a = { x: 12, y: 5 };
a = { x: 12, y: 5, z: 99 };
//可选参数跟复合类型差不多
function sum1(a, b, c) {
    return a + b;
}
sum1(1, 2);
sum1(1, 2, 3);

 

5 接口--interface

接口跟java的不一样

接口:约定、限制

汽车(接口):开、加油、停、锁

//第一个例子
interface Point{
  x:number,
  y:number,
  z?:number
}
var p:Point;
p={x:12,y:5};
p={x:12,y:5,z:99};

//第二个例子
interface A{
  x:number,
  y:number
}
interface B{
  x:number,
  y:number,
  z:number
}
var a:A|B;
console.log(a.x);

编译后的js

var p;
p = { x: 12, y: 5 };
p = { x: 12, y: 5, z: 99 };
var a;
console.log(a.z);

 

6 真正的面向对象

class、extend、多继承

访问修饰符:

  A:public  公有  任何人都可以访问

  B:private   私有  只有类的内部可以访问

  C:protected  受保护的   只有子类可以访问

/案例1
class Person{
  name:string;
  age:number;

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

  showMe(){
    console.log('我的名字叫:'+this.name+'我的年龄是:'+this.age)
  }
}
var p=new Person('blue',18)
p.showMe();


//案例2
class Person1{
  public name:string;
  private age:number;

  show(){
    this.age=18;
  }
}
var p1=new Person1();
p1.name='blue';
//p1.age=18;内部才能访问

编译后的js

//案例1
var Person = /** @class */ (function () {
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.showMe = function () {
        console.log('我的名字叫:' + this.name + '我的年龄是:' + this.age);
    };
    return Person;
}());
var p = new Person('blue', 18);
p.showMe();
//案例2
var Person1 = /** @class */ (function () {
    function Person1() {
    }
    Person1.prototype.show = function () {
        this.age = 18;
    };
    return Person1;
}());
var p1 = new Person1();
p1.name = 'blue';
//p1.age=18;内部才能访问

 

7 泛型

别跟'any'搞混了

可以理解为任何类型,可以用联合类型或者其他的

array是一个典型的泛型

//案例1
class Calc<T>{
    a:T;
    b:T;

    constructor(a:T,b:T){
      this.a=a;
      this.b=b;
    }

    show(c:T){
      alert(this.a);
      alert(this.b);
      alert(c);
    }
}
var obj=new Calc<number>(12,5);
obj.a=12;
//obj.b='abc';
obj.show(99);


//数组完整的写法
var arr:Array<number>=new Array<number>();//数组完整的写法

编译后的js

//案例1
var Calc = /** @class */ (function () {
    function Calc(a, b) {
        this.a = a;
        this.b = b;
    }
    Calc.prototype.show = function (c) {
        alert(this.a);
        alert(this.b);
        alert(c);
    };
    return Calc;
}());
var obj = new Calc(12, 5);
obj.a = 12;
//obj.b='abc';
obj.show(99);
//数组完整的写法
var arr = new Array(); //数组完整的写法

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值