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

TypeScript学习:初学

安装等配置指令

安装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
 }

相关文章:

  • 【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
  • Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
  • DiskGenius工具扩容Mac OS X Apple APFS分区
  • 动态规划,复习
  • 如何开发一个大模型应用?
  • php-fpm
  • Cloud之快照存储(Cloud Snapshot Storage)
  • 基于MATLAB的均匀面阵MUSIC算法DOA估计仿真
  • 2025年——自学黑客计划(网络安全)
  • 细说Java 引用(强、软、弱、虚)和 GC 流程(一)
  • DeepSeek集群版一键部署
  • PyQt 界面编程:QDialog、QWidget、QMainWindow 的面向过程与面向对象编程
  • 在Vue项目中使用three.js在前端页面展示PLY文件或STL文件
  • Python爬虫TLS
  • 玩转SpringCloud Stream
  • 【从0做项目】Java搜索引擎(7) web模块
  • 在做题中学习(90):螺旋矩阵II
  • ArcEngine开发中,当点击窗体中的ButtoncClick时,程序需等待五六秒才反应过来,的解决方案。
  • 深入理解 SQL 事务隔离级别:脏读、不可重复读和幻读
  • 技术速递|Copilot Edits(预览版)介绍
  • 上海建筑领域绿色发展2025年工作要点发布
  • 中美经贸高层会谈在瑞士日内瓦举行
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 央行谈MLF:逐步退出政策利率属性回归流动性投放工具
  • 独家丨刘家琨获普利兹克奖感言:守护原始的感悟力
  • 特朗普政府拟终止太空污染研究,马斯克旗下太空公司将受益