ts基础入门d2

D1回顾

ts是超集、静态:在编译时便会代码检查

命令行编译:需先下载npm i -g typescript
然后 tsc hello.ts 会将ts文件生成js文件、tsc --init 是将ts转为js的配置文件、tsc --watch监视文件中所有ts的变化

属性加?代表可选可不选

类型

string number boolean null undefined symbol object(Array、function...)
any unknown never void tuple enum type interface

大写的Number、String是包装对象object
str2=new String('hello')

断言

不是类型转换,是明确类型

D2速成

常用类型

  • let a:any 就不会推断a的类型了、且any可以赋值给任意类型的变量、可以调用其任何属性

  • let a:unknown 当你不知道该变量的类型、unknown不能赋值给其他类型(除非加if或者断言)、不能调用其任何属性

    • let x:string
    • x=a as string
    • x=<string> a
  • function demo():never{} 限制函数不能顺利调用(死循环or不可正常运行完)never一把是ts自动推断出来的

  • function:void 可以return undefined void类型:后续不可用返回值作后续任何事情(if判断之类)(undefined类型则可以)

  • let a:object object类型是非原始类型,a可以存储非原始类型

    • a={} //[1,2] function(){} new String("123")
  • let b:Object b也可以存储原始类型 b=1 但b不能存null和undefined

  • 索引签名

let person:{
name:string,
age?:number
[key:string]:any}

person={
name:'tt',
age:18,
gender:'female'}
  • 函数
let count:(a:number,b:number)=>number  //=>这个剪头代表函数类型
count=function(a:number,b:number):number{  //js中的=>代表具体函数实现
return a+b
}
  • let arr2:Array<string> 这个Array是泛型

  • 元组 tuple不是关键字

    • let arr1:[string,number] 规定类型和个数
    • let arr2:[number,...string[]] 后面的...string[]表示任意多个
  • enum 枚举

表示一组明确的可选址

enum Direction{Up,Down,Left,Right}  //可以给成员设置初始值,Up=10...、若是字符串枚举,每个成员都要有字符串值,Up="Up"
fucntion changeDirection(data:Direction){
console.log(data)
}
changeDirection(Direction.Up)
 数字枚举:自动递增
 字符串枚举 Up='up'
 常量枚举  const enum
  • type
    能为任意类型创造别名
    type Status=number | string 联合类型
    type Gender="男" | “女” 联合类型
    type Area={ height:number,width:number}
    交叉类型 type1 & type2

  • 特殊情况

type Func = ()=> void  
const f1:Func =function(){
return 999}  //type定义函数限制返回值为void  写函数时可以有返回值
class Person{
name:string
age:number
constructor(name:string,age:number){
this.name=name
this.age=age}
speak(){
}
}

class Student extends Person{  //继承
grade:string
constructor(name:string,age:number){
super(name,age)
this.grae=grade}
study()}

const s1=new Student('李',17)
s1.study()

简写后:

class Person{
constructor(public name:string,public age:number){}
getDetails(){
return `我叫${this.name}`
}
}
 属性修饰符  protected类内部和子类可访问、private类内部,readonly只读(public readonly)
  • 抽象类 无法被实例化,被继承时具体呈现(必须实现其中的抽象方法)
abstract class Package{
constructor(public weight:number){}
//抽象方法
abstract calculate():number
}

//继承类
class StandardPackage extends Package{
constructor(weight:number,public unitPrice:number){super(weight)}
calculate():number{
return this.weight*this.unitPrice;
}
}
const s1=new StandardPackage(10,5)
  • 接口
    定义结构的方式:只定义格式不能包含任何实现
interface IPerson{
name:string
age:number
speak(n:number):void
}

class Person implements IPerson{
constructor(public name:string,public age:number){}
speak(n:number):void{}
}

const p1= new Person('to',18)
p1.speak(4)

//如果不是定义类 而是定义对象
const person :IPerson ={
name:'11',
age:10
} 
//函数接口
interface CountInterface{
(a:number,b:number):number;}
const count:CountInterface=(x,y)=>{
return x+y
}

//接口之间可以继承
//接口可自动合并  interface Iperson...  interface Iperson...

interface和type

接口专注定义对象和类,支持继承合并
type定义类型别名、联合类型交叉类型

接口和抽象类

接口不能有任何代码实现、一个类可以继承多个接口,抽象类可以有抽象方法也可以有具体方法

泛型

function Log<T>(data:T){}
Log<number>(100)
Log<string>('hello')

泛型可以有多个
interface Iperson<T>{name:T}
泛型类
class Person<T>{}

类型声明文件

.d.ts 声明 为现有的js代码提供类型信息,使得ts能够在使用这些js库或模块时进行类型检查和提示

posted on 2025-08-15 21:33  Siannnn  阅读(9)  评论(0)    收藏  举报