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

Typescript学习笔记(2.0)

ts编译选项

tsc  app.ts -w  

参数-w,就是对app.ts进行监视,每次该文件改变时就会自动编译

**:任意目录

*:任意文件

接口

接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法,同时接口也可以当做类型声明去使用。

interface MyInterface{

name:string

age:number

}

使用此接口:const obj:MyInterface={

name:'mez',

age:11}

注意:接口是可以重复声明的。

interface MyInterface{

gender:string

}

这样两个同名接口存在的话等价于:

interface MyInterface{

gender:string

name:string

age:number

}

接口可以再定义类的时候去限制类的结构,接口中的所有属性都不能有实际的值,所以说,接口只考虑对象的接口,而不考虑其值,在接口中所有的方法都是抽象方法。

interface myTest{

name:string;

sayHello():void;

}

定义类时,可以使类去实现一个接口

class MyClass implements myTest{

name:string;

constructor(name:string){

this.name=name;

}

sayHello(){

console.log('大家好~~')

}

}

interface和abstract是TS中独有的,在编译后就看不到了。

属性的封装

(function(){
//定义一个表示人的类
class Person{
//可以用下划线的方式
//TS可以再属性钱添加属性的修饰符
//public:public修改的属性是可以任意修改的
//private:私有属性,只能再类内部进行修改
//通过再类中添加方法使得私有属性可以被外部访问
//protected:受保护的属性,只能在当前类和当前类中的子类中进行访问
private _gender:string;
name:string;
age:number;
constructor(name:string,age:number){
this.name=name
this.age=age
}
//getter方法用来读取属性
//setter方法用来修改属性
//定义方法,用来获取gender属性
getGender(){
return this._gender
}
//定义方法,用来设置gender属性
setGender(value:string){
//判断gender是否合法
if(value=='男' || value=='女'){this._gender=value
}}
}
const per =new Person(name:'孙悟空',age:18)//现在属性是再对象中设置的,可以任意的被修改
//比如
person.name='mez';//但是会存在一个问题,name和age都可以修改,但是当存在不可控的数据时,是非常危险的//TS中设置getter方法的方式
get gender(){
return this._gender
}
//这样的话就可以直接使用.gender即可set gender(value:string){
this._gender=value
}
//可以直接执行
per.gender='男'//可以直接将属性定义在构造函数中
class C{
constructor(public name:string){}
}
//等价于
class C{
constructor(name:string){
this.name=name
}
}
})()

泛型

//在不知道参数的类型时,就可以使用泛型function fn(a:  ??): ?? {
return a}//定义函数或类时,遇到不明确的就可以使用泛型
function fn<T>(a:T):T{return a;
}//只有在函数执行的时候才能确定T的类型//可以直接调用具有泛型的函数
fn(a:10)  //此时number赋值给了T   //类型推断为numberfn<string>(a:'hello')  //手动指定类型,防止在不能自动推断出类型的情况function fn2<T,K>(a:T,b:K):T{
console.log(b);
return a}fn2<number,string>(a:123,b:'hello')interface Inter{
length:number;
}
//T extends Inter  表示泛型T必须是Inter实现类
function fn3<T extends Inter>(a:T):number{return a.length;
}
fn3('123')//不正确
fn3(123)//正确class Myclass<T>{
name:T;
constructor(name:T){
this.name=name
}}
const mc=new Myclass<string>(name:'aaa')

http://www.lryc.cn/news/409841.html

相关文章:

  • 【IJHE】:微通道反应器中全氢二苄基甲苯脱氢产氢
  • Spring踩坑:抽象类作为父类,使用子类@Autowired属性进行填充,属性值为null
  • C#网络连接:TCP/IP模式下的网络连接与同步
  • 基于树莓派(Raspberry Pi) 的智能电表监测系统设计:集成 Home Assistant、SQLite 和 MQTT 协议
  • C语言程序设计(二)
  • Oracle对数据库行和数据库的监控
  • 论文阅读:面向自动驾驶场景的多目标点云检测算法
  • Vite + Vue3 + TS项目配置前置路由守卫
  • 设计模式-备忘录
  • openEuler安装docker,加速镜像拉取
  • angular入门基础教程(七)系统路由
  • Unity Canvas动画:UI元素的动态展示
  • apache.commons.pool2 使用指南
  • 【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)
  • typescript 定义类型
  • 基于Java+SpringBoot+Vue的的课程作业管理系统
  • 分布式日志分析系统--ELK
  • Linux初学基本命令
  • 如何优化PyTorch以加快模型训练速度?
  • 用最简单的方法对大数据进行处理 vs spark(不需要安装大数据处理工具)
  • 非线性校正算法在红外测温中的应用
  • python----线程、进程、协程的区别及多线程详解
  • 将 magma example 改写成 cusolver example eqrf
  • 微信小程序教程007:数据绑定
  • Git -- git stash 暂存
  • 基于YOLO的植物病害识别系统:从训练到部署全攻略
  • 数据库开发:MySQL基础(二)
  • 实现物理数据库迁移到云上
  • [Spring] MyBatis操作数据库(进阶)
  • 【Websim.ai】一句话让AI帮你生成一个网页