TypeScript学习:初学
- 软件开发
- 2025-08-28 17:39:02

安装等配置指令 安装TypeScript
npm i typescript -g
检查版本tsc -v npx tsc -v
运行ts文件及js文件npx tsc 文件名.ts node 文件名.js
安装ts-node脚手架npm i ts-node -g
检查脚手架版本npx ts-node -v
初始化ts状态npx tsc -- init
使用脚手架运行ts文件npx ts-node 文件名.ts
语法 类型注解let 变量名:类型名 = 值
let age = 18->let age:number = 18
只能赋值相同类型age = '张三' 报错:类型错误
其他基本数据类型let name:name = '张三'
let isfalse:boolean = false
let un:undefined = undefined
数组写法let arr:number[] = [1,2,3]
let arr:(string | number)[] = [1,2,3,'4']
let arr:Array<number | string> = [1,2,3,'4']
类型别名type CustomPerson = Array<number | string | boolean>
let arr:CostomPerson = [1,'2',true]
函数类型 function add(a:number,b:number):number{ return a+b; } add(1,2)return '1' 报错:因为要求返回的数据是number类型
add('1',2) 报错:因为要求传入的数据是number类型
键勾函数 const add = (a:number,b:number):number =>{ return a+b } 可通过类型别名来同时指定 type CustomAdd = (a:number,b:number)=>number; const add:CustomAdd = (number1,number2)=>{ return number1+number2 } void类型void函数在不需要返回值的时候使用
function sayHi(str:string):void{ consolr.log(str) } 可选参数参数前加"?"表示可选参数
我不知道传入的参数,就把要求传入的参数改为可以传可以不传
必选参数不可以放在可选参数的后面
function createPerson(name:string,age?:number):void{ console.log(`名字是${name},年龄为${age}`) } createPerson('张三') 对象类型 let person :{ name:string age:number sayHi(str:string):void }={ name : '张三', age : 18, sayHi(str){ console.log(`${str}`) } } person.sayHi('hello') 类型别名适用 type CostomPerson = { name:string, age:number, sayHi(str:string):void } let person:CostomPerson = { name : '张三', age : 18, sayHi(str){ console.log(`${str}`) } } person.sayHi('hello') 键勾函数适用 type CostomPerson = { name:string, age:number, sayHi:(str:string)=>void } let person:CostomPerson = { name : '张三', age : 18, sayHi(str){ console.log(`${str}`) } } person.sayHi('hello') 可选参数适用 type CostomPerson = { name:string, age:number, hobby?:Array<string>, sayHi(str:string):void } let person:CostomPerson = { name : '张三', age : 18, sayHi(str){ console.log(`${str}`) } } person.sayHi('hello') 接口interface关键字来声明接口
interface CustomPerson { name:string age:number } let person:CustomPerson = { name : '张三', age : 18 } 继承 // 继承 继承另一个类型的所有属性 interface CustomPerson1 extends CustomPerson{ songs : string } let star:CustomPerson1 = { name : 'aaa', age : 19, songs : '凤凰传奇' } 元组 let position : [number,string] = [1,'1'] // 类型推论,根据值反推出类型 let age = 18 // age = '111' 字面量类型当类型别名被固定定义时,输入别的值就会报错
{ let str = 'hello' const str1 = 'hello' // 贪吃蛇游戏 type fangxiang = 'down' | 'up' | 'left' | 'right' function move (driection:fangxiang){ console.log(driection) } move('down') // move('aaa') } 泛型传入什么数据类型 返回什么数据类型
注册泛型函数,在变量名后加<type>,type为类型名
function fn<type> (value:type):type{ return value } 调用声明什么类型,就要用到什么类型
let res = fn<number>(10)
let res = fn<string>('a')
一般能推断的函数类型,简化即可
let res = fn(2)
其他属性调用无效泛型函数的类型变量 Type 可以代表多个类型,这导致无法访问任何属性
console.log(value.length) 报错:因为不认识length属性
添加约束添加一个接口,使length属性可以被继承到定义的函数中
interface havelength { length : number } function fn1<type extends havelength> (value:type):type{ console.log(value.length) return value }在调用时,只用有length属性的,在调用时才不会报错
像数字无length属性的,就会报错
let res4 = fn1(2) 报错:因为数字无length属性
let res5 = fn1('abc')
let res6 = fn1([1,2,3,4,5])
多个类型变量在传入一个对象与其对象之中的子属性时,一般情况下不能正常使用
这需要我们添加一个约束,让key的值始终在obj里面
function getValue<Type,Key extends keyof Type>(obj:Type,key:Key){ return obj[key] } getValue({name:'zs',age:18},'name')在未限制对象之前,如果引用的第一个参数不符合条件,反而会在第二个参数报错,那么我们就要对第一个参数也进行约束
// 继承js中object属性,使第一个参数满足object function getValue1<Type extends object,Key extends keyof Type>(obj:Type,key:Key){ return obj[key] } // 这样在引入时就会报第一个参数的错误 // getValue1('aaa','b') 泛型接口但我们在定义了一个固定类型的接口是,泛用性太差,因此我们就需要使用泛型接口在进行泛用
未运用泛型
// 定义了一个接口 interface MyArray100 { length : number push(value:number):number pop():number reverse():number[] } const arr100:MyArray100 = { length:10, push(n:number){ return 11 }, pop(){ return 10 }, reverse(){ return [1,2,3] } } arr100.push(10)运用泛型
// 定义一个存所有值的泛型接口 interface MyArray<Type> { length : number // 返回新的数组长度,所以不用改返回的number类型 push(value:Type):number pop():Type reverse():Type[] } // 存数字 // 声明传入的类型 const arr:MyArray<number> = { length:10, push(n:number){ return 11 }, pop(){ return 10 }, reverse(){ return [1,2,3] } } arr.push(10) // 存字符串 // 存布尔值 泛型工具类型 type Person = { name : string, age : number hobby : string[] }可选
type p = Partial<Person>
只读
type p = Readonly<Person>
单个属性构造
type pickPerson = Pick<Person,'name' | 'age'>
索引签名类型 type Obj = { [key : string] :number } let test : Obj = { x : 111, y : 222 } type Person = { [k : string] : string | number } let zs : Person = { name : 'zs', address : 'aaa', email : 'aaa', age : 18 }TypeScript学习:初学由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“TypeScript学习:初学”