一. TypeScript是js的超集,可以应用所有js语法

二. 特点:

1. 优点

a. 可以在编译阶段就发现大部分错误,这总比在运行时候出错好
b. 同一目录下不同文件中,使用统一命名,会有命名冲突
c. 不显式的定义类型,也能够自动做出类型推论
d. 即使 TypeScript 编译报错,也可以生成 JavaScript 文件
e. Google 开发的 Angular 就是使用 TypeScript 编写的
f. TypeScript 拥抱了 ES6 规范,也支持部分 ES7 草案的规范
g. IDE 智能提示,配合Vscode非常好用
  • 代码重构

  • 可读性高

2. 缺点:

a.有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Classes)、枚举类型(Enums)等前端工程师可能不是很熟悉的东西
b. 短期可能会增加一些开发成本,多写一些类型的定义,长期维护的项目,TypeScript 能够减少其维护成本

三. 类型:

1. 原始数据类型:

布尔值、数值、字符串、null、undefined、symbol(表示独一无二的值)、void、any

2. 内置对象类型:

Boolean, Error, Array, Date, Math, RegExp
Document,HTMLElement,Event,NodeList .... MouseEvent

3. 自定类型:

类、接口

四. 原始数据类型

1. 布尔值

let b: boolean = true
let bool: Boolean = new Boolean(true) //接口

2. symbol

表示独一无二的值

let sy: symbol =Symbol("wfa")

3. null及undefined

默认情况下null和undefined是所有类型的子类型。 就是说你可以把 null和undefined赋值给number类型的变量。

//当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自
let nul: null = null
let und: undefined = undefined nul= 3 //会报错

类型推论

   // 如果初始定义为null或者undefined,未指定类型,则类型是any
let nuls = null 或者 undefined
uls = 3 //此时uls类型是any,可以更改

4. void 空

函数的返回值为空,则表示无return。有return,要定义其他类型

如果函数不指定类型,会进行类型推论。无return是void,有则依据返回值

function fn(): void {
console.log(10)
} //返回值1
function fn(): number {
return 1
}

5. any 任意类型

let an: any = "a"
an = 1 //任意类型可以改变

五. 内置对象类型

1. 获取属性

<body>
<div class = "box" ></div>
<h1>good</h1>
</body>
<script src="./04-内置对象.js"></script> let box:HTMLDivElement = document.querySelector("div">
let html:HTMLElement = document.documentElement
let html:HTMLElement = document.body let h1:HTMLHeadingElement = document.querySelector("h1") box.onmouseenter = funtion(e:MouseEvent):void{
console.log()
}

2. 数组

语法:let 数组名: 类型名[ ] = 值

第一种:以在元素类型后面接上 [],示由此类型元素组成的一个数组:

let arr:number[ ] = [1,2,3,4]

//let arr4:number[] = [1,2,3,"a"] //报错:"a"不是number类型

第二种:是使用数组泛型,Array<元素类型>

let list: Array<number> = [1, 2, 3];

3. 函数

第一种:函数形式:

    function 函数名( arg1:类型名, arg2:类型名): 返回值类型名{}

    function fn(a:number, b:number|string):number{return 1}

    const fn2 = function(a:number,b:number):number{ return 1 }

    const fn3 = (a:string,b:string): number => 1

第二种:接口中函数的定义:

interface 接口名称{
//输入类型(参数): 输出类型(返回值)
(a:number,b:number):number
} //接口定义
interface FnInter{
(a:number, b:number):number
} //使用接口后相当于:
//const fn = function(a:number,b:number):number{ return 1 }
const fn:FnInter =(a,b) => 1 //调用函数
fn(1,1)

4. 对象

对象类型:依赖接口 | 类 来描述, 不给类型可以推论

a. 接口

属性用法:

1.不加任何符号:必传属性(不能少)
2.readonly: 只读属性(不能修改)
3.?: 可选属性
4.[propName: string]: any 任意属性 (也可以约定属性)

例子:

interface ObjInter {
readonly id: number,
name ?: string,
age: number,
[propName:string]: any } const obj:ObjInter = {
id: 2,
name: "ja",
age: 12,
c: 1, //任意属性
d: 3 //任意属性
} //obj.id =3 //将会报错,因为 id是只读属性
obj.name = "good"

六. 联合类型

1. 数组联合

联合类型不同于any

let arr:(number | string)[] = [1,"a",1]
let arr:(number | string | boolean)[] = [1,"a",1,true]
let list: Array<number | string> = [1, "a",3,5,"b"];

2. 基本数据类型联合

let ja: number | string =2

//ja的类型:是number联合string类型
ja="ja2"

七. 泛型

概念:

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而 在使用的时候再指定类型的一种特性。

比喻:

女朋友/男朋友类型,当前不确定,最后才知道

第一种是,传入所有的参数,包含类型参数:

let output = identity<string>("myString");  // type of output will be 'string'

这里我们明确的指定了T是string类型,并做为一个参数传给函数,使用了<>括起来而不是()。

第二种方法更普遍。利用了类型推论 -- 即编译器会根据传入的参数自动地帮助我们确定T的类型:

let output = identity("myString");  // type of output will be 'string'

注意我们没必要使用尖括号(<>)来明确地传入类型;编译器可以查看myString的值,然后把T设置为它的类型。

例子:

//函数泛型
const fn =function <A,B>(a:A,b:B): A {
return a
} fn(1,2) //接口泛型:
interface FnInter<B>{
(a:B):B
}
//返回值也是number类型
const fn:FnInter<number> = ()=>1
fn(1)

八. 类型断言

我们需要在还不确定类型的时候就访问其中一个类型的属性或方法

其一是“尖括号”语法:

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length; function fn(a: number | string ):boolean{
if((<string>a).length) }

另一个为as语法:

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。

例子 :

function fn(a: number | string):boolean{

	//只有string类型的a2,才会true
if((<string>a).length){
return false
} if((a as string).length){ }
//会报错,number类型a,不存在length属性
//if((<number>a).length){
//} return true
}
console.log(fn("1")) //false

九. 类实现接口:

1. 好处:

a. 复用性高

b. 书写习惯

2.比喻

门是一个类,防盗门是门的子类。防盗门有一个报警器的功能,给防盗门添加一个报警方法。车类,也有报警器的功能,就可以考虑把报警器提取出来,作为一个接口,防盗门和车都去实现它

3. 例子:

类实现多个接口:class 类 implements 接口1,接口2{}

class A implements A_InterFace,B_Interface{
public a = 1
public fn = (a,b) => { return 'a'}
public b = 2
public c = (n,m) => n+m
}
interface A_InterFace{
a: number,
fn: (a:number,b:string) => string
} interface B_Interface{
b: number,
c: (n:number,m:number) => number
}

TypeScript基础知识的更多相关文章

  1. Typescript 基础知识

    Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识 类型注解 类型注解在TypeScript中是记录函数或变量约束的简便方法. // 布尔值 l ...

  2. Angular 4 学习笔记 从入门到实战 打造在线竞拍网站 基础知识 快速入门 个人感悟

    最近搞到手了一部Angular4的视频教程,这几天正好有时间变学了一下,可以用来做一些前后端分离的网站,也可以直接去打包web app. 环境&版本信息声明 运行ng -v @angular/ ...

  3. CodeMix入门基础知识

    CodeMix在线订购年终抄底促销!火爆开抢>> CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的 ...

  4. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

  5. Vue基础知识之vue-resource和axios

    Vue基础知识之vue-resource和axios  原文链接:http://www.cnblogs.com/Juphy/p/7073027.html vue-resource Vue.js是数据驱 ...

  6. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  7. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  8. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  9. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

随机推荐

  1. vim 脚本之快捷注释

    今天初步学习了下vim的脚本知识,并尝试写了一个简单的脚本.当然,这个脚本很简单,使用的方法也很笨拙.不过,这仅仅是一个开始,等以后随着对vim语法的深入了解,会不断优化这个脚本的.先记录下来 &qu ...

  2. 25.内置API

    转自:https://www.cnblogs.com/best/tag/Angular/ 3.1.数据转换 示例: 默认情况JavaScript中对象是传引用的: var tom={name:&quo ...

  3. centos 项目上线shell脚本

    最近在弄项目上线,然后写了个上线,备份,回滚的shell脚本 上线可根据自己公司项目做相关操作,备份回滚可修改目录则可实现 主管要求用shell写,那就用shell写吧 本想Python写更好的 哈哈 ...

  4. orm 通用方法——QueryModelCount条件查询记录数

    定义代码: /** * 描述:根据条件查询对象数 * 作者:Tianqi * 日期:2014-09-17 * param:model 对象实例 * param:cond 查询条件 * return:i ...

  5. POJ2823 单调队列

    POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...

  6. js中运算符优先级问题

    其实事情是这样的,最近看到不少朋友讨论一道据说不知道哪儿的笔试题目,题目如下: var a = {n:1}; var b = a; a.x = a = {n:2}; 请写出a.x的值. 当然通过运行, ...

  7. file---探测给定文件的类型

    file命令用来探测给定文件的类型.file命令对文件的检查分为文件系统.魔法幻数检查和语言检查3个过程. 语法 file(选项)(参数) 选项 -b:列出辨识结果时,不显示文件名称: -c:详细显示 ...

  8. Maven学习总结(20)——Maven pom.xml配置再体会

    Maven的pom.xml配置文件详解 <!--父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值. 坐标包括group ID,artifact ID和 vers ...

  9. CSS 类、伪类和伪元素差别具体解释

    CSS中的类(class)是为了方便过滤(即选择)元素,以给这类元素加入样式,class是定义在HTML文档树中的. 可是这在一些情况下是不够用的,比方用户的交互动作(悬停.激活等)会导致元素状态发生 ...

  10. 为什么我们须要复杂的password

    前两天我打开邮箱一看.收到公司1331一封要求改动邮箱password的邮件. 为什么我们须要一个复杂的password呢?尽管我一直以来设置的password都非常复杂.可是公司这次要求改动pass ...