typescript
- typescript 相当于JavaScript 的超集 编程语言 静态类型和面向对象
- typescript 最后运行是还是会以js的形式进运行
- ts使用与大型应用或者多人协作
TypeScript vs JavaScript
- 应用程序不同更适合大项目团队性开发
- 是javasc的超集 类似于less和sacc
- 跨浏览器 跨操作系统 跨主机 跨平台 且开源(微软)
- 开始于js终止与于js
- 重用js 甚至可以引用js流行的库 echats
- TypeScript 提供了类 接口 模块
Typescript开发环境和构建
- 首先需要安装node环境
- npm install typescript -g
- 使用tsc --version 可查看否安装成功
- 可以使用npm init -y 生成packge.json包
- 使用tsc --init生成tsconfig.json文件 配置文件
- npm install @types/node --dev-save (解决模块声明文件问题)
- 运行-构建 选择构建类型 会生成相应名称的js文件
- 最后可以通过 node xxx.js 进行打印
变量类型
弱类型和强类型语言
JavaScript就是一种弱类型语言
TypeScrit或java 是一种强类型语言
- number 类型中的 NaN 在强类型中声明number 并不会报错
- 枚举类型 enum 固定类 例如 人 :男人 女人 声明枚举类型一般使用大写
enum REN {nan ,nv}
会打印出索引或者下标
例:console.log(REN.nan)
输出值为0
若想打印文字则enum REN {nan='男' ,nv='女'}
函数的定义
例如:
function myfunction(age:number):string{
return 'xxxxx'
}
1、上述的number代表传参的类型
2、string表示 返回的参数类型
形参定义的时候若是不想全部传递 则可以这样声明
function myfunction(age:number,phone?:number):string{
return 'xxxxx'
}
有剩余参数类型的
(…name:string)
Es6的解构赋值
三种函数的定义方式
1、函数声明法
- function(){}
2、函数表达式法
- var add=function(){}
3、箭头函数
var add =(na:string,nb:number):number=>{}
函数中的变量作用域
- 函数体内使用var声明的变量 在外部是无法使用的
引用类型的数组
array new sting date Regexp 等
示例
1、数组
数值类型
let arr1:number[]
字符串类型
let arr1=:Array<string>
布尔值类型
let arr1=:Array<boolean>
赋值方法分为两种
- 字面量赋值法
- 构造函数赋值法
字面量赋值法
let arr1:number[]=[]
let arr1:number[]=[1,2,3,4]
let arr1=:Array<string>=['1','2']
构造函数赋值法
let arr1:Array<string>=new Array(‘1’,‘2’)
let arr1:number[]=new Array(1,2)
赋值只能单一赋值 不能使用不同变量类型进行赋值
特殊情况‘元祖’
let x :[string,number]
必须按照顺序类型进行赋值
引用类型 字符串
- 基本类型字符串 单引号或者双引号声明的
- 引用类型字符 使用new实例化的
基本类型
let name:string = '张三'
引用类型
注意声明类型首字母需要大写
let name:String = new String('张三')
引用类型 日期类型
let d:Date = new Date()
引用类型 正则表达式
RegExp
类似于字符串的声明方法
- 构造函数声明法
- 字面量声明法
构造函数
let reg:RegExp = new Rexp('xxx')
字面量
let reg:RegExp = /xxx/g
正则表单式的常用方法
- test(string)查找是否存在 会返回一个布尔值
- exec(string)成功返回数组 失败则返回null
面向对象编程 类的声明和使用
类是对象具体事物的一个抽象
对象是类的具体表现
- 类的声明要使用class
- 类的名称要使用大驼峰命名方法
clas Demo{
name:string
age:number
constructor(name:string,age:number){
}
say(){
console.log('hello')
}
}
// 需要进行实例化
let p:Demo = new Demo('张安',100)
面向对象 类的修饰符
- public 公用修饰符
- protected 受保护修饰符
- private 私有的修饰符
class Demo{
public sex:string
protected name:string
private age:number
public constructor(sex:string,name:string,age:number){
this.sex=sex
this.age=age
this.name=name
}
}
let test:Demo = new Demo('男','修勾',20)
readonly 只读
class Demo {
public readonly sex:string='男'
}
面向对象 接口知识
定义接口要使用 interface
interface Husband{
sex:string
age:number
}
let api:Husband = {'男' ,22}
筛选器类型
面向对象 命名空间
namespace 用来声明命名空间
例如
namespace Demo{
export class Femo{
public name:string = '张三'
talk(){
console.log('hello')
}
}
}
namespace Demo1{
export class Femo1{
public name:string = '李四'
talk(){
console.log('hi')
}
}
}
//用下述方法进行实例化
let test:DEmo.Femo = new DEmo.Femo