分享Typescript的13个基础语法

目录
  • 一.Ts是什么
  • 二. 基本语法
    • 1.声明原始数据类型
    • 2.声明Object类型
      • 2.1声明数组类型
      • 2.2声明元组类型
    • 3.声明枚举类型
    • 4.函数参数与返回类型
    • 5.任意类型
    • 6.类型断言
    • 7.接口基本使用
    • 8.类基本使用
    • 9.类的访问修饰符
    • 10.类只读属性
    • 11.类与接口
    • 12.抽象类
    • 13.泛型

一.Ts是什么

首先,强类型不允许随意的隐式类型转换,而弱类型是允许的。JavaScript就是经典的弱类型语言。而Typescript可以说是JavaScript的超集,在JS的基础上新增了许多语法特性,使得类型不再可以随意转换,能大大减少开发阶段的错误。

二. 基本语法

1.声明原始数据类型

在变量后面指定一个关键字表示其只能为什么类型。

string类型:

const a: string = 'auroras'

number类型:

const b: number = 666 // 包括 NAN Infinity

boolean类型:

const c: boolean = true

null类型:

const d: null = null

undefined类型:

const e: undefined = undefined

symbol类型:

const h: symbol = Symbol()

2.声明Object类型

首先,object类型不单单可以指定对象,还可以指定数组或函数:

const foo1: object = {};
const foo2: object = [];
const foo3: object = function(){};

如果只想指定为对象,如下,对象属性都要提前声明好类型:

const obj: {name: string,age: number} = {
    name: '北极光',
    age:18
}

2.1声明数组类型

可以指定声明Array且通过<>指定元素类型,比如指定声明元素都为数字的数组:

const arr: Array<number> = [1,2,3]

第二种方式如下,也指定声明元素都为数字的数组:

const arr: number[] = [1,2,3]

2.2声明元组类型

就是要提前指定数组里每个元素的类型,严格一一对应:

const tuple: [number,string,boolean] = [666,'auraros',true]

3.声明枚举类型

通过关键字enum声明一个枚举类型,如:

enum Status {
    pedding = 1,
    resolve = 2,
    reject = '3'
}
//访问
console.log(Status.pedding);

如果全不写值,默认值为从0开始递增。如果第一个元素为字符类型,就必须全部定义值。如果第一个元素指定为一个数字,后面元素不写值,那值为第一个元素值按位置大小递增的结果。

4.函数参数与返回类型

函数声明式:

指定函数传入参数类型,指定返回值类型,调用时传入参数个数与类型都必须相同:

括号里指定每个参数类型,括号右边指定返回值的类型。

function fun (name:string,age:number):string{
  return 'sss'
}
fun('auroras',18);

如果传入参数不确定传不传,那么可以给参数加个‘?'表明它是可选的:

function fun (name:string,age?:number):string{
  return 'sss'
}
fun('auroras');

或者给参数添加默认值,那也会成为可选参数:

function fun (name:string,age:number=666):string{
  return 'sss'
}
fun('auroras');

如果参数个数不确定,可以用扩展运算符加解构赋值表示,当然要传入与指定类型一致的:

function fun (name:string,age:number=666,...res:number[]):string{
  return 'sss'
}
fun('auroras',1,2,3);

函数表达式:

const fun2:(name:string,age:number)=>string = function(name:string,age:number){
  return 'sss'
}

定义接口时再详细说。

5.任意类型

通过指定any关键字表示任意类型,跟原来 js 一样,可以任意赋不同类型的值:

let num:any = 1;
num = 'a';
num = true;

6.类型断言

类型断言就是明确的告诉typescript这个变量就是某种类型的,百分之百确定。不用typescript在一些情况下要自己推断某些没有明确定义或者多变的场景是什么类型。

可以通过 as+类型 断言它就是某种类型的:

const res = 1;
const num = res as number;

也可以通过 <类型> 形式断言(不推荐):

const res = 1;
const num = <number>res

7.接口基本使用

接口可以理解为一种规范,一种契约。可以约束一个对象里应该有哪些成员,这些成员都是怎么样的。

通过interface定义一个Post接口,这个接口是一个对象,规则为有一个name属性类型为string,age属性类型为number。

interface Post {
    name:string;
    age:number
}

然后比如有一个函数 printPost ,它的参数 post 使用我们定义的 Post 接口的规则,那么调用此函数传参时要传入符合 Post 接口规则的数据。

interface Post {
    name:string;
    age:number
}

function printPost(post: Post){
    console.log(post.name);
    console.log(post.age);
}
printPost({name:'asd',age:666})

当然,函数传参时可能有些参数是可选的,那么我们可以给接口也定义可选的成员,通过属性后加一个‘?'指定可选成员:

interface Post {
    name:string;
    age:number;
    sex?:string;
}

const auroras: Post = {
    name:'asd',
    age: 18
}

如果用readonly修饰成员,那么这个成员属性在初始化后便不可修改:

interface Post {
    name:string;
    age:number;
    sex?:string;
    readonly like:string
}

const auroras: Post = {
    name:'asd',
    age: 18,
    like: 'natrue'
}
auroras.name = 'aaaa';
//保错
auroras.like = 'wind';

如果连成员属性名称都不确定,那么可以声明动态成员,要指定成员名字类型与成员值的类型,如:

interface Post {
  [prop:string]:string
}
const auroras: Post = {
    name:'asd',
    like: 'natrue'
}

8.类基本使用

描述一类具体事物的抽象特征。ts增强了es6class类的相关语法。

首先,类的属性使用前必须提前声明好:

class Person {
    name: string;
    age: number;
    constructor(name:string,age:number){
       this.name = name;
       this.age = age;
    }
    sayHi(msg:string):void {
        console.log(`hi,${msg},i am ${this.name}`);
    }
}

9.类的访问修饰符

private 修饰私有属性,只能在类内部访问。public 修饰公用属性(默认),

外部也可访问:

class Person {
  public  name: string;
  private  age: number;
  constructor(name:string,age:number){
       this.name = name;
       this.age = age;
    }
  sayHi(msg:string):void {
        console.log(`hi,${msg},i am ${this.name}`);
        console.log(this.age);
    }
}

const jack = new Person('jack',20);
//Person类公有属性可以访问
console.log(jack.name);
//Person类私有属性不可以访问
console.log(jack.age);
protected修饰为受保护的,外部也不可访问。但与 private 的区别是若是继承的子类是可以访问的。

class Person {
  public  name: string;
  private  age: number;
  // protected
  protected gender: boolean;
    constructor(name:string,age:number){
       this.name = name;
       this.age = age;
       this.gender = true;
    }
    sayHi(msg:string):void {
        console.log(`hi,${msg},i am ${this.name}`);
        console.log(this.age);
    }
}

class children extends Person{
    constructor(name:string,age:number){
        super(name,age,);
        //可以访问
        console.log(this.gender);
    }
}

10.类只读属性

给属性设置 readonly 则为只读属性,该属性初始化后便不可再修改。

class Person {
  public  name: string;
  private  age: number;
  // readonly
  protected readonly gender: boolean;
    constructor(name:string,age:number){
       this.name = name;
       this.age = age;
       this.gender = true;
    }
    sayHi(msg:string):void {
        console.log(`hi,${msg},i am ${this.name}`);
        console.log(this.age);
    }
}

11.类与接口

一些类与类之间有些许共同的特征,这些共同的特征可以抽象成为接口。

比如 Person 类和 Animal 类,虽然是不同类,但是人和动物都会吃东西和走路等,这些共同的特征可以由接口定义。最后一个特征就定义一个接口。

//吃接口
interface Eat {
    eat(food:string):void
}
//行进接口
interface Run {
    run(behavior:string):void
}
//人
class People implements Eat,Run {
    eat(food:string){
       console.log(`在餐桌上吃${food}`);
    }
    run(behavior:string){
       console.log(`站着${behavior}`);
    }
}
//动物
class Animal implements Eat,Run {
    eat(food:string){
       console.log(`在地上上吃${food}`);
    }
    run(behavior:string){
       console.log(`爬着${behavior}`);
    }
}

12.抽象类

约束子类必须有某些成员,有点类似接口,不同的是抽象类可以包含一些具体的实现。比如动物类应该为一个抽象类,它的子类有猫,狗,熊猫等。它们都是动物,也有一些共同的特征。定义一个类为抽象类后,就不能再new实例了,只能被其子类继承。

其中abstract 定义抽象类,类里用abstract定义一个抽象方法,子类必须实现抽象方法。

abstract class Animal  {
    eat(food:string){
       console.log(`在地上吃${food}`);
    }
    abstract run (behavior:string):void
}
//猫
class Dog extends Animal{
    run(behavior:string):void{
        console.log(behavior);
    }
}
const d1 = new Dog();
d1.eat('骨头')
d1.run('四脚爬行')
//兔子
class rabbit extends Animal{
    run(behavior:string):void{
        console.log(behavior);
    }
}
const r1 = new rabbit();
d1.eat('萝卜')
d1.run('蹦蹦跳跳')

13.泛型

泛型就是在定义函数,接口或者类的时候没有指定具体类型,等到使用时才指定具体类型。极大程度的复用代码。

比如有一个 identity 函数,这个函数会返回任何传入它的值,且传入的类型与返回的类型应该是相同的。如果传入数字,不用泛型的话,

这个函数可能是下面这样:

 function identity(arg:number):number{
     return arg
 }
如果传入字符串,这个函数可能是下面这样:

 function identity(arg:string):string{
     return arg
 }
这样的话太麻烦,所以可以使用泛型,一般用大写 T 表示泛型,它可以适用于多个类型,且传入类型与返回类型是相同的。

 function identity<T>(arg:T):T{
     return arg
 }

到此这篇关于分享Typescript的14个基础语法的文章就介绍到这了,更多相关Typescript的14个基础语法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • TypeScript基础类型介绍

    目录 1.基础类型 2.对象类型 2.1数组 2.2元组 2.3对象 3.类型推断 3.1类型联合中的类型推断 3.2上下文类型 4.类型断言 TS 的静态类型可以人为的分为两类: 基础类型:像布尔值(boolean).数字(number).字符串(string).Any(任意类型).Void(无类型).Null. Undefined.Never(无值类型) 对象类型:像数组.函数.对象.枚举.元组. 1.基础类型 TS的类型定义主要通过以下示例代码中演示的方式进行定义: ;(function

  • TypeScript基础入门教程之三重斜线指令详解

    前言 TypeScript是Javascript的超集,实现以面向对象编程的方式使用Javascript.当然最后代码还是编译为Javascript. 三斜杠指令是包含单个XML标记的单行注释. 注释的内容用作编译器指令. 三斜杠指令仅在其包含文件的顶部有效. 三重斜杠指令只能在单行或多行注释之前,包括其他三重斜杠指令. 如果在声明或声明之后遇到它们,则将它们视为常规单行注释,并且没有特殊含义. /// <reference path ="..."/> /// <re

  • vue语法自动转typescript(解放双手)

    代码的复用是一件很常见的事情,如果是公共代码的复用那还好说,直接做成一个内部私有库,想用的话安装一下 npm包就行了,但是业务代码的复用就不好做成包了,一般都是复制粘贴 我一般写代码的时候,如果觉得某段业务代码以前见过其他人写过,那么考虑到业务优先性,只要别人的代码不是写得太烂,我一般会优先抄别人的代码,省得自己再写一遍 然后我就遇到了一个问题,公司目前前端项目大部分都是 vue,早期没有 ts这个说法,后来新项目才逐渐引入 ts,所以新项目用的是 vue-ts,而一般想抄的老代码都是没有引入

  • 分享Typescript的13个基础语法

    目录 一.Ts是什么 二. 基本语法 1.声明原始数据类型 2.声明Object类型 2.1声明数组类型 2.2声明元组类型 3.声明枚举类型 4.函数参数与返回类型 5.任意类型 6.类型断言 7.接口基本使用 8.类基本使用 9.类的访问修饰符 10.类只读属性 11.类与接口 12.抽象类 13.泛型 一.Ts是什么 首先,强类型不允许随意的隐式类型转换,而弱类型是允许的.JavaScript就是经典的弱类型语言.而Typescript可以说是JavaScript的超集,在JS的基础上新增

  • 基于JS脚本语言的基础语法详解

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法: 1.所有的字符全都是英文半角的: 2.大部分情况下每条语句结束后要加分号: 3.每一块代码结束后加换行:4.程序前呼

  • javascript基础语法——全面理解变量和标识符

    关于javascript,第一个比较重要的概念是变量,变量的工作机制是javascript的基本特性.实际上,变量是标识符的一种.本文将详细介绍变量和标识符 定义 标识符(Identifier)就是一个名字,用来对变量.函数.属性.参数进行命名,或者用做某些循环语句中的跳转位置的标记 //变量 var Identifier = 123; //属性 (new Object).Identifier = 'test'; //函数及参数 function IdentifierName(Identifie

  • Python学习笔记(二)基础语法

    学习Python,基本语法不是特别难,有了C的基本知识,理解比较容易.本文的主要内容是Python基础语法,学完后,能熟练使用就好.(开发环境依然是Python2.7,简单使用)一,基本知识1,不需要预先定义数据类型(此说法值得商榷,姑且这么说吧),这是与其他语言的最大不同(如C,C++,C#,Delphi等) 复制代码 代码如下: >>> x=12 >>> y=13 >>> z=x+y >>> print z 25 注意:尽管变量不

  • 详解Sql基础语法

    1.创建数据库 create  database 数据库名称 2.删除数据库 drop database 数据库名称 3.备份sql server 创建备份数据的device use master exec sp_addumpdevice '名称','新的名称','路径' 开始备份 backup database pubs to 新的名称 4.创建表 create table 表名(列名1 类型,列名2 类型) 5.根据已有表创建新表 create table 新表名称 like 旧表名称 cr

  • jQuery基础语法实例入门

    本文实例讲述了jQuery基础语法.分享给大家供大家参考.具体分析如下: 此语法规则有两个部分组成:获取jQuery对象和对jQuery对象执行的操作. 复制代码 代码如下: $(selector).action() 下面就对以上语法规则进行详细的阐述: 1.$定义jQuery,将被选的DOM对象转换成jQuery对象. 2.selector是选择器,类似于CSS选择器. 3.action()是要对jQuery对象行的操作. 注: $是jQuery的简写.例如: 复制代码 代码如下: $("di

  • Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】

    本文实例讲述了Laravel框架基础语法与知识点整理.分享给大家供大家参考,具体如下: 这篇文章的知识点主要有以下几个点: 模板中输出PHP变量 模板中调用PHP代码 原样输出 模板注释 引入子视图 知识点一:模板中输出PHP变量 首先我们要有一个变量,这个变量我们将他存储于控制器当中. 如下: $name = 'Rarin'; 当然,这个变量肯定要和输出视图放置在一个方法里,然后,我们在Bstp.blade.php(Bstp目录下的)填入 {{$name}} 代码.效果如下: 知识点二:模板中

  • Python面向对象原理与基础语法详解

    本文实例讲述了Python面向对象原理与基础语法.分享给大家供大家参考,具体如下: 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的,我们之前学习的 变量.数据.函数 都是对象 在 Python 中可以使用以下两个方法验证: 在 标识符 / 数据 后输入一个 .,然后按下 TAB 键,iPython 会提示该对象能够调用的 方法列表 使用内置函数 dir 传入 标

  • Java基础语法之二维数组详解

    一.二维数组 进入正题之前.首先为了便于大家理解,我画了一个图: xx枪战游戏中, 我是一个刚刚注册账号的小白,系统送了我两把枪,此时,我的武器库只有这么一层(可以理解为一位数组,枪就是对应的数组中对应的元素) 经过艰苦卓绝的战斗,终于有了一笔钱,现在我打算配置好的游戏装备,我现在有了一个枪柜,它可以存放三层的枪械,每一层都可以放多把武器(这个就是二维数组,有多层,每层都是一个一维数组) 随着游戏时长和我的高超技术,获取游戏装备的效率越来越高了,一个枪柜已经存不下了,于是,我就有了多个枪柜(这个

  • Java 基础语法让你弄懂类和对象

    目录 Java 基础语法 一.类与对象的初步认知 二.类和类的实例化 三.类的成员 1. 字段/属性/成员变量 2. 方法 3. static 关键字 四.封装 1. private 实现封装 2. getter 和 setter 方法 五.构造方法 1. 基本语法 2. this 关键字 六.认识代码块 1. 什么是代码块 2. 本地代码块 3. 实例代码块 4. 静态代码块 七.补充说明 1. toString 方法 2. 匿名对象 八.总结 Java 基础语法 其实在学习 C 语言时就一直

随机推荐