typeScript--基础学习

typeScript

因为是js的超类,所以大致上还是很容易学的,所以总结一下差异
1.菜鸟


新增
1.定义元素变量是需要使用:注释改变量的类型
优化了js的弱类型语言,影响我花里胡哨的骚操作
2.单一类型数组类定义时可以使用Array<类型>或者类型[]的形式声明
let arr : Array<String> =['hello','word'];
或者let arr : String[] =['hello','word'];
3.不一样类型的数组,被称为元组
注意一点:元组是一个已知元素数量和类型的数组
let elemArr : [number , string] = [1,'123'];
4.枚举:这是个类型(enum),可以用来定义数值集合
我百度了一哈,说是短范围内的数组比较,如颜色啊,星期啊
…突然醒悟了一件事,这个枚举对前端相当的友好,特别是基于es6的模块化,
我们可以在一个js中集中管理我们的enum类,然后通过字段获取数值,进行前后端的交互,
感觉也没啥用…算了,过会再想想吧
5.void这个一般没有返回值的时候都能看到,现在只不过要自己加个:把结果体现出来
6.any 任意的类型
7.never 不可能的类型,表现为抛出异常或无法执行到终止点(例如无限循环)
8.如果不加冒号书写类型注释,默认是any(重点11)
9.所以总的来讲,用ts你写了类就可以增强一下语言,不写就和普通的js没区别
10.类型断言,我们有时候需要把一个类型的值赋值给另一个类型,当ts变成强语言类型时这样做就会报错

let o : string = '1';
let o1 : number = o as number;

console.log(o1+"是"+typeof o1);
//Conversion of type 'string' to type 'number' may be a mistake because neither type
// sufficiently overlaps with the other.
// If this was intentional, convert the expression to 'unknown' first

这里还涉及到了类型优先级的问题


let o : any = '1';
let o1 : number = o as number;

console.log(o1+"是"+typeof o1);

反正总的来讲,类型断言就是能让你赋值,没有类型转换的作用,你要转类型还是要自己调API.

11.类型推断
当单纯申明变量的时候,不赋值,会变成any类型
但是声明和赋值是同一句时,会将值的类型作为变量的类型

12.私有类型定义


//ts
class nbsp {
    static bnspname='nbsp';
    num():void{
        console.log(nbsp.bnspname);
    }
}
const space:nbsp = new nbsp();
space.num();

var nbsp = /** @class */ (function () {
    function nbsp() {
    }
    nbsp.prototype.num = function () {
        console.log(nbsp.bnspname);
    };
    nbsp.bnspname = 'nbsp';
    return nbsp;
}());
var space = new nbsp();
space.num();

我觉得无发可脱,static本身作为构造函数的属性,所以,ts中对这个属性的修改只能通过构造函数放出来的方法进行修改,想对于子对象来说的确是静态属性的一种表现形式,但是也因为在同一个父类上构造对象,所以该属性仅仅只能作为静态属性使用,而不是私有属性
13.函数属性类型注释和数值初始化,剩余参数的接收


function addnum(a:number=1,b:number=2,...arr:any[]):number|undefined{
    console.log(arr);
    return a+b;
}
console.log(addnum());

14.函数重载


function disp(x:any,y?:any):void { 
    if(y){
        console.log(y); 
    }else{
        console.log(x); 
    }
} 
disp("abc") 
disp(1,"xyz");

?是一个关键,如果不添加,会对每一参数的传入进行校验,当传入数不等时,会报错
15.联合类型
一个值可能会在中间发生类型变化,所以为了代码顺利进行,可以使用联合类型

    let a:number|string = 1;

这样就可以赋值数字或者字符串


let anyArr:Array<number | string> =[12,333,1,'11']; 

数组也是同样的道理
16.接口
对象模板,因为强类型语言的关系,定义对象时,需要有一个类来定义,所以出现了接口
他是一个对象模板,所以也可以使用继承 extend,所以在总体来看,这个本身是个空值类,然后他是ts的部分,所以不会被转换成js


//菜鸟的实例
interface IParent1 { 
    v1:number 
} 
 
interface IParent2 { 
    v2:number 
} 
 
interface Child extends IParent1, IParent2 { } 
var Iobj:Child = { v1:12, v2:23} 
console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)

17.命名空间
18.模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值