mac 配置环境
终端执行命令 sudo npm install -g typescript
终端执行命令 sudo npm install -g ts-node
终端执行命令 sudo npm install -g @types/node
vscode安装coderunner插件,进入 ts 文件,右键 Run Code ,即可输出结果
语言基础
可选属性
当属性的类型为可选属性类型时,可传可不传。
格式
代码语言:txt复制key ?: Type
id?: Number
代码语言:txt复制// 可选参数 key?: type
function getPersonalInfo(data:{id?: Number,address: String, name: String}){
console.log(`可选参数----- ${data.name}`)
if(data.id != undefined) {
console.log(data.id)
}
}
getPersonalInfo({name:"老王",address:"大胡同"})
在 JavaScript 中,如果您访问不存在的属性,您将获得undefined值,而不是运行时错误。因此,当您从可选属性读取时,您必须在使用它之前检查 undefined。
联合类型
当一个属性拥有两个或者两个以上类型那么它就是 联合类型,表示可能是这些类型中的任何*一种*的值。
在使用 联合类型时,我们可以明确它为具体类型时执行对应的逻辑,通过 typeof 。
格式
代码语言:txt复制name: Number | String | Boolean | ....
代码语言:txt复制function getPhone(phone: Number | String ) {
if(typeof phone == 'number') {
console.log('我是number 类型 的逻辑处理')
} else if (typeof phone == 'string') {
console.log('我是string 类型 的逻辑处理')
}
}
getPhone(222) //我是number 类型 的逻辑处理
类型别名
使用场景: **多次使用相同的类型并通过单个名称引用它。**
格式
代码语言:txt复制type Name = {
k1:String,
k2:Number,
.....
}
type Name = String | Number | undefined | ...
代码语言:txt复制// 类型别名
// 定义类型别名 对象
type StudentInfo = {
name: string,
age: number,
height:string,
}
// 定义类型别名 联合类型
type Id = String | Number
function getStduentInfo(stu: StudentInfo,id: Id) {
console.log(`我们班的新来的同学名字叫${stu.name},--- 他的身高${stu.height}`)
console.log(`他的学号为${id}`)
}
getStduentInfo({name:'张三',age:22,height:"178"},200001)
// 我们班的新来的同学名字叫张三,--- 他的身高178
// 他的学号为200001
接口
格式
代码语言:txt复制// 接口
interface Name {
key1: String,
key2: Boolean,
key3: ....
}
代码语言:txt复制// 接口
interface User {
name: string,
age: number,
}
function getData(obj : User) {
console.log(obj.name)
}
getData({
name: '小明',
age: 11
})
//小明
类型别名 与 接口 异同
**同**
**它俩都是用来 规范属性的类型的,一般可以随意使用,如果考虑到扩展属性,使用 interface 接口。**
**异**
**接口可以扩展,而类型别名 不可以扩展,简单的说,就是类型别名不能添加新的属性,而接口可以** extend
**继承新的属性。**
interface User {
name: string,
age: number,
}
interface UserPlus extends User {
education:String
}
const person: UserPlus = {
education: "硕士",
name: "张三",
age: 0
}
上面代码 实现了接口的扩展,增加了一个 education
属性.
类型断言
有时TypeScript 无法得知属性的具体类型时,我们可以告诉编译器它为具体的类型。
**⚠️ 注意:**
- **类型断言是在编译时删除的,因此没有与类型断言关联的运行时检查。如果类型断言错误,则不会生成异常或 null。**
格式
它有两种写法:
- as
const canvas = document.getElementById("myCanvas") as HTMLCanvasElement
- <>
const canvasS = <HTMLCanvasElement>document.getElementById("myCanvas")
文本类型
一个文本类型本身没有任何价值,将它多个文本组合起来就有意思了,相当于该属性已经指定了 一组值,可以是其中一种值。
格式
代码语言:txt复制status: "已打开" | "已关闭" | "已暂停"
使用场景
- 指定函数参数一组固定值一组值中的一个值
function getStatus(status: "已打开" | "已关闭" | "已暂停") {
if(status == '已打开') {
console.log(`执行${status}业务逻辑`)
}
if(status == '已关闭') {
console.log(`执行${status}业务逻辑`)
}
if(status == '已暂停') {
console.log(`执行${status}业务逻辑`)
}
}
getStatus("已打开")
// 执行已打开业务逻辑
- 指定函数返回值为固定值一组值中的一个值
function dealNum(a:number,b:number): 0 | 1 {
return a > b ? 1 : 0
}
console.log(dealNum(2,4)) //0
- 与非文本类型结合使用
interface KFC {
// v50套餐