TypeScript基础知识
一. 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基础知识的更多相关文章
- Typescript 基础知识
Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识 类型注解 类型注解在TypeScript中是记录函数或变量约束的简便方法. // 布尔值 l ...
- Angular 4 学习笔记 从入门到实战 打造在线竞拍网站 基础知识 快速入门 个人感悟
最近搞到手了一部Angular4的视频教程,这几天正好有时间变学了一下,可以用来做一些前后端分离的网站,也可以直接去打包web app. 环境&版本信息声明 运行ng -v @angular/ ...
- CodeMix入门基础知识
CodeMix在线订购年终抄底促销!火爆开抢>> CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的 ...
- vue基础知识之vue-resource/axios
Vue基础知识之vue-resource和axios(三) vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...
- Vue基础知识之vue-resource和axios
Vue基础知识之vue-resource和axios 原文链接:http://www.cnblogs.com/Juphy/p/7073027.html vue-resource Vue.js是数据驱 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
随机推荐
- HDU 1730 Northcott Game
简单的尼姆博弈.想到了非常easy! 就拿一行举例.怎么赢.? 就是死劲挨着对方移,当然假设本身就是挨着的,又轮到你移动了,那么对于这一行来讲.你就是输的!! 由此可见每一行的棋子起始距离就显得尤为重 ...
- Vue进阶之表单控件绑定
1.单行input <html> <head> <meta charset="UTF-8"> <meta name="viewp ...
- 英语影视台词---三、Cinema Paradiso
英语影视台词---三.Cinema Paradiso 一.总结 一句话总结:天堂电影院 1.Alfredo: No, Toto. Nobody said it. This time it's all ...
- js易错点总结及 常见面试的坑
最近在研究Javascript发现了其中一些比较灵异的事情.有点让人感到无语比如: var arr = [], arr2 = {}; console.log(typeof(arr) === typeo ...
- Python(四) 分支、循环、条件与枚举
一.什么是表达式 表达式(Expression)是运算符(operator)和操作数(operand)所构成的序列 二.表达式的优先级 三.表达式优先级练习 优先级同级 从左往右计算 1 or 2 a ...
- js正则学习分享
http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html http://www.cnblogs.com/tylerdonet/ ...
- Java 学习(14):接口 & 包(设置 CLASSPATH 系统变量)
Java 接口(英文:Interface) 定义:在JAVA编程语言中,接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方 ...
- QT项目升级(QT4.6.3到QT5.2)时,遇到的问题和解决方法
QT4升级到QT5修改: PC部分: [改QTDIR变量] 在project根文件夹下找到.user文件, 如InnoTabPlugin.vcxproj.user 改动指向你的QT5根文件夹: < ...
- Template template parameter(模板參数) example
/********************************************************************************* Copyright (C), 19 ...
- mysql异常Lock wait timeout exceeded; try restarting transaction
mysql中使用update语句更新数据报错: Lock wait timeout exceeded; try restarting transaction. 这是由于你要更新的表的锁在其它线程手里. ...