npm install typescript -g
全局安装TypeScript代码运行环境//let 变量名称:变量类型 =
//String:大写的是JavaScript中的包装类,new String()
//string:小写的是TypeScript定义变量的类型
let message: string = "123"
console.log(message)
tsc index.ts
将ts文件编译成js文件,进行使用tsc
命令,将ts转成js,比较麻烦npm install ts-node -g
npm install tslib @type/node -g
ts-node index.ts
即可// let/const 变量名称:数据类型(类型注解) = 赋值
let message:string = "hello" //string就是类型注解
let message = "hello"
const message:"hello" = "hello"
const num:1.88 = 1.88
let num:number = 1.88
let flag:boolean = true
let str:string = "hello"
明确指定<数组>的类型注解
let names:string[] = ['1','2']
let num:Array<number> = [1,2,3]
//类型注解,要和实际的内容相对应,否则就会报错
let obj:{
name:string,
age:number
} = {
name:"zhangcheng",
age:18
}
let obj:object = {
name:"zhangcheng"
}
let n: null = null
let unde:undefined = undefined
function sum(num1:number,num2:number){}
function sum(num1:number,num2:number):number{}
let arr = ["zhangsan","lisi"]
arr.forEach((item,index,arr)=>{})
//item,index,arr属于上下文类型,不需要特殊的指定
//参数名称:{属性1:类型注解,属性2:类型注解,....}
function printPoint(ponit: { x: number, y: number }) {
console.log(ponit.x,ponit.y);
}
//传入参数的时候,一定要包含设定好的属性
printPoint({x:100,y:200})
type ponitType = {
x: number
y: number
//z表示可选属性,可以传入,可以不传入
z?:number
}
//参数名称:{属性1:类型注解,属性2:类型注解,....}
function printPoint(ponit: ponitType) {
console.log(ponit.x,ponit.y);
}
//传入参数的时候,一定要包含设定好的属性
printPoint({x:100,y:200})
let a:any = "why"
a = 123
unknown是TypeScript中比较特殊的类型
unknown类型的变量,做所有的操作前都是不合法的
let str: unknown = "123456"
//直接取length会报错
// console.log(str.length);
//需要进行类型校验
if (typeof str === "string") {
console.log(str.length)
}
//指定一个变量是函数 let foo:()=>void = () => {}
function delayFn(fn: () => void) {
setTimeout(() => {
fn()
},1000)
}
delayFn(() => {
console.log(123);
})
//情况一不会自己定义never类型,通常是自动推导出来的
//1.死循环
function foo(): never {
while (true) {
console.log(123)
}
}
foo()
//2.函数返回值是空的情况
function foo1() {
return []
}
function changeMessage(message: string | number) {
switch (typeof message) {
case "string":
console.log(message.length)
break
case "number":
console.log(message);
break
default:
//正常来说永远不会执行到default中的代码
const check:never = message
}
}
changeMessage(123)
//但有一天某个人对工具函数进行了更改,增加了一种boolean的情况,且没有考虑boolean的case,则default就会提示报错,让开发者能够看到问题
//数组的定义方法 类型[]
let arr: (string | number)[] = [123, "123"]
//元组的定义方法 [类型1,类型2]
let tuple: [string, number, boolean] = ["123", 123, true]
console.log(tuple[0]);