TypeScript学习_入门向

1-TypeScript简介

首先官网祭天 ---> https://www.tslang.cn/

TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。

TypeScript 由微软开发的自由和开源的编程语言。

TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

我们使用一张图来说明TypeScript和JavaScript的关系

使用更加简单的说法:

TypeScript = JavaScript + 类型约束 + 高级特性

我们一般只会在项目中使用类型约束,高级特性我就先不涉及了。

2-环境准备

TypeScript最终会编译成js来运行,所以我们需要先准备好将TypeScript编译为js的环境。

a.安装TypeScript

首先全局安装ts

  1. npm install -g typescript

然后可以使用命令来验证安装是否成功了。

  1. tsc --version

b.使用tsc命令编译ts为js

  1. tsc ./src/xxx.ts

这时候会自动生成对应的.js文件

然后我们就可以执行对应的js文件。

c.配置tsconfig文件

但是每次都使用tsc命令编译单个文件会比较麻烦,所以我们可以做一个统一配置

先使用 tsc --init 命令初始化一个 tsconfig.json 文件

里面配置如下:

  1. {
  2. "compilerOptions": {
  3. "target": "ESNext",
  4. "module": "ESNext",
  5. "outDir": "./dist",
  6. "skipLibCheck": true,
  7. ...
  8. }
  9. }

然后我们只需要 tsc 一下,所有的ts文件就能被编译了。

d.自动编译

之后我们只需要启动vscode的监听任务功能,就能自动编译了。

1.选择终端 -> 运行任务

2.选择typescript类型的任务

3.选择监视任务

3-变量类型约束

ts里面声明变量和常量 , 固定语法 :
        let/const/var 变量:类型 = 值;
其实ts也可以自动进行类型的推导:
  1. let str:string = "abc";
  2. let str2 = "DeF";

类型大小写的区别:

  1. // 小写的number指的是字面量类型的数字
  2. let str3:number;
  3. // 大写的Number指的是对象类型的数字
  4. let n:Number;
所以在没法进行类型推导的时候,一定把类型约束加上,
 

我们在ts里面,基本都会给任何一个数据添加类型约束。基本语法如下:

  1. const/let/var 变量名:数据类型 = 数据;

例如:

  1. const num:number = 10;
  2. let str:string = 'abc';
  3. var bool:boolean = true;

在ts里面,类型一旦定义了,在代码执行过程中就不允许改变其类型。

  1. let num:number = 10;
  2. num = 'abc'; // 报错:不能将类型“string”分配给类型“number”。

4-any类型

唯一的一个例外,如果我们定义的类型是any,那么就可以被修改类型,因为这个any类型表示任意类型,会跳过ts的类型检查,其实是不安全的,如果不是迫不得已,我们不要使用any。

  1. let value: any;
  2. value = 10;
  3. value = "abc";
  4. value = null;
  5. value = undefined;

5-复杂类型

 以前在 js 里面,所有的 引用 都 Object 类型
  1. new Object() { }
 
但是在ts里面如果直接使用 {} / new Object(),是会报错的
  1. let obja = {}
  2. obja.name = '狗蛋'; // 引用类型,在ts里面约束尤其严格
 
Date 对象有 Date 对象的属性和方法。
Math 对象 有 Math对象的属性和方法。
两者都是对象 ,但是不能混为一谈, 他们两种对象的属性和方法是完全不一样的,如果不区分,就没法推导 对象身上的成员。
 

如果我们想约束一个复杂数据的类型,就要使用 type / interface / 对象字面量 的方式。

在ts里面,每种对象都是一个类型,每种对象才能进行类型推导和类型约束。

有五个常用方式可以进行类型的约束。

 
 

a.对象字面量进行类型约束

字面量  -->  直接使用 {属性名:类型}
  1. let obj:{name:string,age:number} = {name:'狗蛋',age:12}

a-1 补充 另外的字面量进行类型约束

比如想定义一个人类的性别 :
  1. var p1 : {name:string,gender:"男" | "女"};
  2. p1 = {
  3. name:"狗蛋",
  4. gender : "女"
  5. }

b.interface(接口)--开发常用

在进行引用类型的约束的时候,除了 字面量 ,还可以使用  interface 进行数据结构的约定 :
 
  语法:
  1. //接口名称其实怎么写都行,最好有一个约定: interface 都以 I 开头
  2.    
  3. interface 接口名称 {
  4.                属性名:类型;
  5.                ...
  6.            }
       interface 相比于 字面量 定义引用类型来说 在项目中使用得最多的
           1. interface 可以复用
           2. 实现继承
 

interface主要用来约定一个复杂数据的类型。

  1. interface IUser{
  2. id:number;
  3. name:string;
  4. gender:boolean;
  5. }
  6. let user:IUser = {
  7. id:1,name:'狗蛋',gender:true
  8. }
接口继承 :
  1. interface IPerseon{
  2. id:number;
  3. name:string;
  4. age:number;
  5. }
  6. interface IStudent extends IPerseon{
  7. number:number;
  8. }
  9. const s1:IStudent = {
  10. id:2,
  11. name:'翠花',
  12. age:15,
  13. number:1000
  14. }

如果有一个属性是可能有可能没有的,可以使用可选的方式声明 :

  1. interface IUser{
  2. id:number;
  3. name:string;
  4. // ? 表示可选
  5. gender ?: boolean;
  6. }

c.type类型别名--开发常用

 有时候我们会觉得一个类型的声明太麻烦, 可以给该类型一个别名 :
type 别名 = 类型

type关键字用于取一个类型别名。

  1. // 类型别名
  2. type mult = number | string;
  3. let m:mult = 10; // 合法
  4. m = 'abc'; // 合法

d.泛类型TS

泛型其实就是  类型参数化
 
       有时候,我们在定义一个数据结构的时候,并不清楚将来这个数据是什么类型,希望将来使用的时候才确定;
       在使用这个类型的时候,再告诉ts进行推导就行;
 
   以前发请求的时候 :
       请求返回的数据主要有三大块 :
  1. {
  2.                code : number ;
  3.                message : string ;
  4.                data : ?  data的类型无法确定,不同的接口,返回的data是不一样,可能是 null 可能是 boolean ,也可以是对象,还可能是数组
  5.            }
 
  难道在请求的时候,data是any? 不对!!!
 
  此时就是在我们使用到这个data的时候,再确定这个data是什么类型 ----> 这就是泛型的使用场景
 
   泛型的语法
   类型<T,...> {
           属性:T,
       }
  1. // 比如:
  2. interface IExample1<T,N,M> {
  3. // data的类型不能确定,传多个值必须声明对应个数的形参
  4. data: T,
  5. data2: N,
  6. data3:M
  7. }
  8. let obj1:IExample1<string,string,boolean> = {
  9. data:"abc",
  10. data2:"def",
  11. data3:true
  12. }
  13. let obj2:IExample1<number> = {
  14. data:1
  15. }
  16. // 将来我们想确定请求回来的数据是什么类型
  17. interface IResponse<T> {
  18. code : number;
  19. message : string;
  20. data : T;
  21. }

e.函数TS

ts里面函数的完整写法,相比会有点不同
    js 格式 :

  1.   function 函数名(参数){
  2.             函数体
  3.         }
    ts 格式 :

  1. function 函数名(参数:参数类型): 函数返回值的类型{
  2.         }
  1. // 在参数后面加  :类型  意思是要求函数返回该类型
  2. function addFn(a:number,b:number):number{
  3. //必须return,return的类型必须是要求函数返回该类型
  4.     return 'abc'
  5. }

TypeScript学习_入门向的更多相关文章

  1. labview学习_入门篇(一)

    写在前面的话: 在上大学的时候,实验室的老师推荐用labview工具编写上位机软件,当时不想用labview,感觉不写代码心里不踏实,后来用vb和matalb开发了上位机软件.但现在由于部门的几款工具 ...

  2. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  3. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  4. LESS学习笔记 —— 入门

    今天在网上完成了LESS的基础学习,下面是我的学习笔记.总共有三个文件:index.html.main.less.mian.css,其中 mian.css 是 main.less 经过Koala编译之 ...

  5. TypeScript 学习资料

    TypeScript 学习资料: 学习资料 网址 TypeScript Handbook(中文版)(推荐) https://m.runoob.com/manual/gitbook/TypeScript ...

  6. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...

  8. 基于Nodejs生态圈的TypeScript+React开发入门教程

    基于Nodejs生态圈的TypeScript+React开发入门教程   概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...

  9. [IT学习]sql 入门及实例

    sql 是一种数据库查询语言,可以让你很快的查询到数据.其实一般情况下,你也可以采用excel来查询数据库数据. 但是人们通常认为sql会更加灵活和方便一些. sql学习的入门网站: http://w ...

随机推荐

  1. Microsoft .NET Framework 远程执行代码漏洞

    受影响系统:Microsoft .NET Framework 4.8Microsoft .NET Framework 4.7.2Microsoft .NET Framework 4.7.1Micros ...

  2. 6月26日 Django 中间件

     前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...

  3. springboot通过maven下载依赖失败解决

    公司直接用不了内网遇到的好的坑.导入网上的springboot项目的启动入口一致有报错,如:Cannot resolve symbol 'SpringApplication' maven配置设置都做了 ...

  4. java中自己常用到的工具类-压缩解压zip文件

    package com.ricoh.rapp.ezcx.admintoolweb.util; import java.io.File; import java.io.FileInputStream; ...

  5. grafana初级入门

    grafana初级入门 预备知识 Metrics.Tracing和Logging的区别 监控.链路追踪及日志作为实时监测系统运行状况,这三个领域都有对应的工具和解决方案. Metrics 监控指标的定 ...

  6. Git初始化常用方法

    准备工作 安装git sudo apt install git 创建一个ssh密钥 如果已经有ssh密钥了,则这一步不要执行 ssh-keygen -t rsa -C '账号' 复制公钥内容 gedi ...

  7. 一个Spring的应用看起来象什么?

    一个定义了一些功能的接口. 这实现包括属性,它的Setter , getter 方法和函数等. Spring AOP. Spring 的XML 配置文件. 使用以上功能的客户端程序.

  8. jvm-learning-概述

    JVM整体结构: java代码的执行流程 JVM的架构模型 public class StackStruTest { public static void main(String[] args) { ...

  9. Collection和 Collections的区别?

    Collection是集合类的上级接口,继承与他的接口主要有Set和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作.

  10. Redis 集群,集群的原理是什么?

    1).Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务. 2).Redis Cluster 着眼于扩展性,在单个 redis ...