typescript基础总结

【Typescript】基础知识小总结

2020-02-16 09:54:37

标签:it

    最近磕TS,不磕不知道,ts包括了很多js的基础知识点,然后结合es6,有了更多的完善的的地方,对开发环境更加的友好。我将我学习到的新知识点,和涉及的老知识点做一个总结。

一、类型

    最特别的第一个总结,与js不一样的是,ts有了类型注解,也就是说,每一个对象、数组、函数都可以定义类型注解。

    在编译器中实验可以得知,类型注解不是强制的,但是编译器可以根据你的赋值,推断出你定义的变量应该赋什么值。这也叫类型推断。在编译的时候,如果没有定义类型注解,应该多查看编译器推断的注解是不是需要的,不然可能会有隐藏的雷。

    类型注解可以分为两类:


    对于基础类型的类型注解的示例:

   const a:string = 'hello'

    在此只说在程序里如何定义,每一个的详细意思在平时编程里或多或少能遇到,或者在网上也有更详细的总结。在这里想特别提一下any,它比较特别,可以有两个用处,一是不知道怎么定义的时候可以用any先暂时定义,或者类型推断,如果类型推断不正确也喜欢推断成any,这里需要注意一下。在学习的时候,过来人的建议,由于any用的太过频繁,甚至有人直接称typescript为anyscript,失去了用它的初衷。

    下面一个一个写对象类型的示例:

1、函数

基础写法:

const function = (str:string) => {

                                 return parseInt(str,10)

}

注:此处未注明function的类型,是因为编译器会自动推断为number

函数中多个对象定义类型的写法:

function getNum({fir,sec}:{fir:number,sec:number}){

                                    return fir,sec

}

或者

function getNum:({fir,sec}:{fir:number,sec:number}) =>number = (fir,sec) =>{

                                   return fir,sec

}

注:传入值如果是实现定义好的不会强制检测

2、数组

基础写法:const arr:number[] =[1,2,3]

定义类型不唯一的写法: const arr:(number | string)[] = [1,'hello',2]

定义的类型是一个对象:const arr:{ name: string} [] =[{ name:'json' },{ name: 'dora'}] //注意此处是定义的每一个对象都有一个name,值的属性是string的意思,在对象中就不存在其他类型的对象了。

如果类型定义太长,也可以写一个类型别名,之后再引用:

type test = { name : string , age : number }

const arr:test[] = [{name:'json',age:22},{name:'dora',age:25}]

如果想定义数组中每一个元素的属性,可以用元组,例如:

const arr:[string,number,string,number] = ['hello',1,'world',2]

3、interface接口

    和类型别名相似,interface可以集中定义属性,但是和类型定义的区别在于,作用的对象有不同,interface可以作用于函数、对象、类。

    interface可以定义属性,也可以在其中定义方法。下面是示例代码:

interface Count {

   name:string;

   age:number;

  count():void

}

    在interface中也可以单独定义属性,常用的是readonly只读属性,它和const都具有只读属性,区别是const作用于变量,readonly作用属性;'?'可有可无的属性,也就是说该元素的有无不强求;[propName:string]:any 可接受其他字符串的属性,下面是统一的示例代码:

interface Count {

  readonly name:string;

   age?:number;

  count():void;

[propName:string]:any

}

    interface定义的类,示例代码如下(interface定义沿用上文的):

 class CountNum implements Count{

...

    interface接口也可以继承,示例代码如下:

interface Count1 extends Count {

sex:string 

}

注:Count1为子接口 Count为父接口

    interface可定义函数,代码示例如下:

interface Num {

(fir:number,sec:number):number

}

function add:Num=(first:1,sec:2) =>{

...

}

二、类

    类可以将属性、方法放在一起,在es6的时候,将这个定义提了出来,它是一个面向对象的函数,可以继承,可以被重写等。在我看来,类不止是一个语法糖,它使得js的应用范围变得更加的广泛和具有更多的可能性。

    基础定义:

class xx {

name='hello';

say(){

return this.name

}

}

注:xx为类的名字


1、类实例化

    使用类的内容之前都需要先实例化,如下例:

const person = new xx();

2、类的继承

1、extends:

class xxx extends xx {

...   //定义新方法、属性

}

注:1、xxx为子类名,xx为父类名

      2、子类里如果有和父类重名的方法,父类相同的方法会被重写

2、super:

class xxx extends xx{

say(){

  return super.getname() + ' hello '

}

}

super既继承了父元素,又不会被重写。

3、类的类型

private:允许在类的内部调用

protected:允许在类内及继承的子类中使用

public :允许在类的内、外被调用

4、关于static

1静态方法,不会被实例继承,只能通过类的调用

2在一个静态方法中同一个类中有其他静态方法可以通过this调用

3非静态方法中,不能直接通过this调用,而是通过类名调用:CLASSNAME.STATIC_METHOD_NAME()或用构造器中的属性:this.constructor.STATIC.METHOD_NAME()调用

4不能被实例继承,可以被子类继承

5、constructor

    在类实例化的瞬间,constructor会自动执行,作为类的构造器,如果实例未定义constructor,实例化后默认函数中有可空的constructor。constructor方法默认返回实例对象,即this。也可以返回其他对象。

    子类的constructor中,需要super父类的constructor,即使父类的constructor为空,子类的super()也需要写。

6、getter和setter

    在私有类中,可以通过getter和setter得到和设置数据:

class Person{

constructor( readonly _name:string) {

 get name(){

  return this. _name +'world'

}

set name(name:string) {

    const realname = name.split(' ')[1];

    this._name = realname;

}

}

}

const person = new Person('hello');

//输出 ‘hello world’

person.name = 'dora';

//输出‘dora world’

7、抽象类

    可定义属性,方法,无需赋值,不能实例化,只能被继承,需注意,定义的抽象方法,在子类需要被实现。大致写法如下:

abstract class XX{

abstract say():string

width:number

....

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容