当前位置: 首页 > news >正文

TypeScript

安装ts

npm i -g typescript

HelloWorld

// 类型的注解
// 以前的js写法
var a = 'hello world'
// ts写法,给变量a添加类型注解
// String Array Number   tsc .\01HelloWorld.ts
var b:string = '小明'
var c:String = '哈哈'
console.log('b',b);
console.log('c',c);
var d:number = 123
var e:boolean = true
var arr1:number[] = [1,2,3]
// 元素类型允许表示一个已知元素数量和类型的数组
var arr:[string,number] = ['hello',123]
//数组的泛型
var arr2:Array<number> = [1,2,3]
var arr3:Array<string> = ['i','m']
// TypeScript 变量的命名规则:// - 变量名称可以包含数字和字母。
// - 除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。
// - 变量名不能以数字开头。
//  数字枚举默认是从0开始的,也可以手动指定
// 枚举一般首字母大写
enum Color{Red=1,Green,Blue
}
let c1:Color = Color.Green
console.log('c1',c1);
// void它表示没有任何类型,当一个函数没有返回值时,你通常会见到其返回值类型是 void:
// 如果一个函数有void返回类型
function fun():void{// return 12345
}
var dd = fun()
console.log('dd',dd);
// never类型表示的是那些永不存在的值的类型
// 回never的函数必须存在无法达到的终点
// 一般用于抛出错误
function error(message:string):never{throw new Error(message);
}
// any类型
let notSure:any='ppp'
var notSure1:string = notSure
// unknown未知类型 严格的any
// unknown类型只能被赋值给unknown和any类型,不能赋值给其他类型
var unknownVar:unknown = 123;
// var unknownVar1:number = unknownVar
// 相信我,我知道自己在干什么
// 类型断言 类型断言好比其他语言里的类型转换
var unknownVar2:string = unknownVar as string
// 类型断言有两种形式。其中一“尖括号”语法:
var unknownVar3:string = <string>unknownVar

函数

// ts是包含js的
function fun(a){console.log('a',a);
}fun(1)
function fun2(a:number,b:number){console.log('a',a);console.log('b',b);
}
fun2(123,999)// 函数的可选参数
function fun3(a:string,b?:number){console.log('a',a);console.log('b',b);
}
fun3('hello',12)// 默认参数
function fun4(a:number=2){console.log('a',a);
}
fun4(3)// 函数的剩余参数
function fun5(a:string,...c:any[]){console.log('a',a);console.log('c',c);
}
fun5('hello',1,2,3,4,'world',true)// 构造函数
function Person(name:string,age:number){this.name = namethis.age = age
}
var p = new Person('张三',99)
// 函数的返回值 规定函数的返回值的类型
function fun6(a:number,b:number):number{return 123
}

type类型别名

// var obj ={
//     name:'张三',
//     age:18
// }
// console.log('obj.name',obj.name);
// obj.sex = '男' // 不被允许这样写
var obj : {name:string,age?:number // 可选参数[key:string]:any // 索引签名允许定义对象可以具有任意数量的属性,这些属性的key和value数可变的// 索引签名常用语:描述类型不确定的属性(具有动态属性的对象)
}={name:'张三',sex:'男',class:12456
}
// 类型别名
type aa = string
var str:aa = 'hello'
// 联合类型
type bb =string|number|boolean
var cc:bb = true
let dd:string|number|boolean = '123'
// 类型别名的一个应用
type User ={name:string,age?:number
}
// 交叉类型 &
type User1={sex:string
}
type User2 = User & User1
var person:User ={name:'张三'
}
var person1:User2={name:'李四',sex:'男'
}
// 数组对象
var arrObj:User2[]=[{name:'王五',sex:"男"},{name:'王五',sex:"男"},{name:'王五',sex:"男"},
]
// 还有一种写法利用数组的泛型
var arrObj1:Array<User2>=[{name:'王五',sex:"男"},{name:'王五',sex:"男"},{name:'王五',sex:"男"},
]
// 数组对象的
type P ={name:string,age:number
}[]
var Person:P =[{name:'张三',age:18},{name:'张三',age:18},{name:'张三',age:18},
]

接口的基本使用

// 声明一个接口需要使用关键字interface
// interface接口可以进行继承
interface Child{name:string,age:number,sex:string
}
interface Father{money:number
}
interface Father{weight:number
}
interface Child extends Father{height:number
}
var obj:Child ={name:"张三",age:18,sex:"男",money:1000,height:180,weight:100,
}
console.log('obj',obj);
// 1.type可以声明基本类型,而interface不行
// 2.type可以进行交叉类型,而interface不行
// 3.interface可以进行继承而type不行
// 4.type在同一作用域下不能重复命名
// ts中定义方法
var count:(a:number,b:number)=>number
// ts中的=>表示函数类型,=>左边表示参数,右边表示返回值
count = (x,y)=>{return 123
}interface CountFun{(a:number,b:string):string
}
var countfun2:CountFun =(e,t)=>{return e+t
}
// 属性修饰符 只读属性 readonly
interface User{name:string,age:number
}
var person:User={name:'张三',age:18
}
person.name='李四'
console.log('person',person);

泛型

// 方法的泛型
// 我们需要一种方法使返回值的类型与传入参数的类型是相同的 
// 这里,我们使用了 类型变量,它是一种特殊的变量,只用于表示类型而不是值。
// 我们把这个特殊变量称为 类型变量,它用字母 T 来表示。
// 一般类型变量用A-Z 26个大写字母中的其中一个来表示
// function identity<T>(arg: T): T {
//     return arg;
// }
// 在fun1里面,D可以任意类型他就是类型变量,a是形参
function fun1<D>(a:D):D{return a
}
console.log('打印',fun1<number>(1));
fun1<string>('1')
fun1<boolean>(true)
// class 类
class Person{name:stringage?:numberconstructor(name:string,age:number){this.name = namethis.age = age}
}
var p = new Person('张三')

可选链

// <template>{{obj && obj.company && obj.company.name && obj.company.name.name}}<template>
// ts{{obj?.company?.name?.name}}
var obj={company:{name:{name:"小明"}}
}
if(obj && obj.company && obj.company.name && obj.company.name.name){console.log(obj.company.name.name);}
if(obj?.company?.name?.name){console.log(obj.company.name.name);
}


http://www.mrgr.cn/news/54333.html

相关文章:

  • 听劝!跨境电商一定要做离钱近的市场(选品思路+运营建议)
  • 音频分割:长语音音频 分割为 短语音音频 - python 实现
  • AI 自学 Lesson2 - 回归(Regression)
  • STM32中的RAM和ROM分别是什么
  • 算法笔记day07
  • 中国白酒怎么喝
  • Spark安装
  • 教电脑“看”图片
  • 【4046倍频电路】2022-5-15
  • Linux操作系统切换设置系统语言
  • 用HTML标签承载页面内容:前端开发的基础知识
  • [实时计算flink]Flink SQL作业快速入门
  • OpenHarmony中EAP-PEAP认证支持 GTC方式
  • 21世纪当代国学易经起名大师颜廷利:全球知名哲学家思想家
  • JavaWeb——Maven(5/8):依赖管理-依赖配置(Maven 项目中的依赖配置、访问仓库网站、配置依赖的注意事项)
  • 自动机器学习(AutoML)
  • 苹果最新的M4 MacBook Pro
  • python 字符串的格式化与eval()
  • 【Linux-进程间通信】匿名管道+4种情况+5种特征
  • NodeJS 使用百度翻译API
  • 顺序表算法题【不一样的解法!】
  • Lucas带你手撕机器学习——逻辑回归
  • OpenFeign的使用
  • AI学习指南深度学习篇-自编码器的变种
  • 论文精读:PRL 交变磁MnTe中的手性分裂磁振子
  • 场景化运营与定制开发链动 2+1 模式 S2B2C 商城小程序的融合