【typescript】记录typescript基本知识的学习

Anaconda详细安装及使用教程(带图文) Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda的下载文件比较大(约531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和Python)。 Conda是一个开源的包、环境管理器,可以用于... 阅读详情

1.typescript特点

1.编译型的语言
2.强类型的语言
3.真正面向对象的语言

 

 2.全局安装

npm install -g typescript

 tips:ts编译成js:tsc demo.ts 

 

3.基础数据类型 

 字符串类型

let email:string="111@163.com"
let msg:string = `my email is ${email}`

 

布尔类型

let isTrue:boolean=false

 

 数字类型

let age:number=10

 

数组

let list:number[]=[1,2,3,4]
// 数组泛型,Array<元素类型>
let list: Array<number> = [1, 2, 3]

 

元组:已知元素数量和类型的数组

let arr:[string,number]=['aaa',10]

 元素的数量等于类型的种类,元素排列顺序与对应类型排列顺序一致

 

枚举

enum Weeks{mon,tue,wed}//索引从0开始
let day:Weeks=Weeks.mon;
console.log(day);//索引值
console.log(Weeks[0]);//对应的值
console.log(Weeks['mon']);

也可手动指定成员的数值

enum Weeks{mon = 2,tue,wed}

 

any(任何类型)

let x:any='a'
x=10

 

void(函数的返回值(无))

function fun():void{
    console.log(111);
    //return 111;//因为无返回值,所以这里抛异常
}

function fun1():string{//返回对应类型
    return '111';
}

void类型只能赋值undefine和null

let a: void = undefined;

 

undefine和null

let y:null=null
let y:undefined=undefined

 

never??Object??

 

 

4.联合数据类型

或

let x2:number | string | boolean
x2:true

 

类型推论

let x3=3;
//x3='';//根据初始化类型的值进行推论

推了个寂寞???

类型断言

let x5:string |number |boolean;
let strlength:number= x5.length; //报错,不知道x5是什么类型

let x5:string |number |boolean='aabb';
let strlength:number=x5.length;//不报错

let x5:string |number |boolean='aabb';
let strlength:number=(<string>x5).length;//不报错
let strlength1:number=(x5 as string).length;//不报错

 

 

5.接口

接口可理解为一种规范或者限制,行为的抽象,可以用来约束类,数组,函数,对象

对类的约束

//接口定义
// 自定义声明,不包含具体内容
interface Iprinter{//打印接口
    //约束函数规范
    //不包含函数体
    Printer(msg:string):string;
}


interface Imsg{
    getmsg():string;
}


// 实现接口,要实现里面的内容
class colorprinter implements Iprinter,Imsg{//实现多个接口

    Printer(msg:string):string{
        return '打印'+msg+'成功';
    }

    getmsg():string{
        return '实现信息接口';
    }
}

let p1 = new colorprinter();
console.log(p1.Printer('简历'));
console.log(p1.getmsg());

 

对函数的约束

interface Imyfunction{
    (a:string,b:number):boolean;//函数规范的定义
}


let fun1:Imyfunction;
fun1=function (a:string,b:number):boolean{
    return false;
}

 

 对数组的约束

interface Istuarr{
    [index:number]:string;
}

let arr1:Istuarr;
arr1 =['aa','bb'];

 

对对象的约束

interface Idara{
    name:string;
    readonly age:number;    //只读属性
    email?:string;//可选属性

}
function showdata(n:Idara){
    console.log(n);
}
showdata({name:'张三',age:19});

 

接口的继承

interface Printer{
    getmsg();
}

//接口继承接口
interface colorprinter extends Printer{
    printer();
}


//类实现接口
class hpprinter implements colorprinter{
    getmsg(){
       console.log('打印机');
    }
    printer(){
       console.log('彩色打印机');
    }
}

 

 

6.类

 类的定义

class Person{
    name:string;
    age:number;
    constructor(name:string,age:number){
        this.name = name;
        this.age = age;
    }
    printer(){
        return this.name +','+this.age;
    }
}
let p = new Person('lala',19);
console.log(p.printer());

 

类的继承

class Student extends Person{
    cardnum:string;
    school:string;
    constructor(cardnum:string,school:string){
        super('ee',20);
        this.cardnum = cardnum;
        this.school = school;
    }
    dowork(){
        return this.name +','+this.cardnum;
    }
}

let stu = new Student('11','学校');
console.log(stu.dowork());

 

 

7.访问修饰符

public / private / protected

  • public:类的内外部都可访问
  • private:只能在类的内部访问
  • protected:在类的内部及其子类可以访问

静态属性 / 静态方法

class food{
    // 实例属性
    name:string='食物';
    static age:number=10;//静态属性
    // 实例方法
    printer(){
        console.log('aaa');
    }
    static printer1(){
        console.log('bbb');
    }
}
// 静态属性  类名访问
food.age=1;
// 静态方法  类名访问
food.printer1();

 

多态

同一个父类下面的不同子类,有不同的实现

class animal{
    eat(){
        console.log('eat');
    }
}

class cat extends animal{
    eat(){
        console.log('cat');
    }
}

class dog extends animal{
    eat(){
        console.log('dot');
    }
}

// 不同的子类有不同的实现
let c1 = new cat();
c1.eat();

 

抽象类 / 抽象方法

//抽象类和抽象方法
//抽象类是提供其他类继承的基类(父类),不能直接被实例化
//抽象方法只能包含在抽象类中,抽象类中可以包含抽象方法和非抽象方法
// 子类继承抽象类,实现抽象方法

abstract class dian{
    abstract dianqi();//抽象方法,无具体的方法体
    run(){
        console.log('run');//非抽象方法
    }
}


class kongtiao extends dian{
    dianqi(){
        console.log('kongtiao');
    }
}

class bingxiang extends dian{
    dianqi(){
        console.log('bingxiang');
    }
}

let kongtiao1 = new kongtiao();
kongtiao1.dianqi();

 

 

8.函数

函数的定义

function add(x,y):number{
    return x+y;
}

let add1 = function(x,y):number{return x+y}

 

函数的参数(可选参数 / 默认参数 / 剩余参数)

//x为默认参数
function add2(x:number=10,y:number):number{
    return x+y;
}

//参数后有问号,表示是可选参数
function show(name,age?:number):void{
    console.log(name);
}
show('aaa');

// 剩余参数
function add3(x1,x2,...x:number[]):number{
    let sum = 0;
    for(let i=0;i<x.length;i++){
        sum+=x[i];
    }
    return x1+x2+sum;
}
console.log(add3(1,2,3,4,5,6));

 

函数重载

function getinfo(name:string):void;
function getinfo(age:string):void;
function getinfo(str:any):void{
    if(typeof str =='string'){
          console.log('名字'+str);
    }
    if(typeof str =='number'){
        console.log('年龄'+str);
    }
}

 

 

 

9.泛型 

 泛型函数

function printer<T>(arr:T[]):void{
    // for   /  for in   /for of
    for(let item of arr){
       console.log(item);
    }
}

printer<string>(['aa','bb','aa']);
printer<number>([11,22,33]);

 

泛型类

class myArrayList<T>{
    public name:T;
    public list:T[]=[];
    add(val:T):void{
        this.list.push(val);
    }
}

let arr = new myArrayList<number>();
arr.add(11);
arr.add(22);
console.log(arr.list);

 

泛型接口

interface Iadd<T>{
    (x:T,y:T):T;
}
var add1:Iadd<number>;
add1=function(x:number,y:number){
    return 111;
}
console.log(add1(1,5));

 

 

10.简单示例

1.todoList

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .item-ok{
            text-decoration: line-through;
            color:#ccc;
        }
    </style>
</head>
<body>
    <input type="text" id="content" placeholder="输入代办事项">
    <button id="btn">添加代办事项</button>

    <ul id="todolist">
        <li>一条代办</li>
        <li>me too</li>
    </ul>
    <script src="./todolist.js"></script>
</body>
</html>

 js代码:

// 1.定义代办事项类
class Todo{
    content:string;
    status:boolean;

    constructor(content:string,status:boolean){
        this.content = content;
        this.status = status;
    }
}


// 2.初始化代办信息
let todolist:Todo[]=[
    new Todo('第一条代办',true),
    new Todo('第二条代办',false)
];

// 3.渲染代办列表
const todoul = document.getElementById('todolist');
const content:HTMLInputElement = document.querySelector('#content');
const btn = document.getElementById('btn');
function renderList(){
    let listdom = '';
    if(todolist.length > 0){
        todolist.forEach(function(elm,index){
            // es6拼接
            listdom+=`<li class="${elm.status ? 'item-ok':''}">${elm.content}</li>`;
        });
    }else{
        listdom+=`<li>暂无代办</li>`;
    }
    todoul.innerHTML = listdom;
}

// 4.添加代办
function addTodo(){
    const contentVal = content.value.trim();
    if(!contentVal){
        alert('请输入代办');
        return false;
    }
    todolist.push(new Todo(contentVal,false));
    content.value = '';
    renderList();
}

btn.addEventListener('click',()=>{
    addTodo()
});

window.onload = function(){
    renderList();
}

2.购物车 

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .header li{
            float: left;
            list-style: none;
            margin-right: 100px;
        }
    </style>
</head>
<body>
    <ul class="header">
        <li>名称</li>
        <li>描述</li>
        <li>单价</li>
        <li>数量</li>
    </ul>
    <br/>
    <ul id="box">

    </ul>
    总价:<span id="sum"></span>
    <script src="09-购物车.js"></script>
</body>
</html>

js代码:

// 假数据
const cartGoodsList=[
    {
        id:'1',
        name:'苹果手机',
        desc:'aaaa',
        price:2000,
        count:1,
        isChecked:true
    },
    {
        id:'2',
        name:'小米手机',
        desc:'bbbb',
        price:1500,
        count:1,
        isChecked:true
    }
];

// 购物车类
class Cart{
    cartGoodsList=cartGoodsList;//购物车商品列表
    cartdom:HTMLElement = document.querySelector('#box');
    sumdom:HTMLElement = document.querySelector('#sum');
    
    // 渲染购物车
    renderCart(){
        let cartDom = '';
        this.cartGoodsList.forEach(item=>{
            cartDom+= 
            `<li>
                <input type="checkbox" ${item.isChecked ? 'checked':''} id="${item.id}"/>
                <span>${item.name}${item.desc}</span>
                ${item.price}  ${item.count}
            </li>`;
        });
        this.cartdom.innerHTML = cartDom;
    }

    // 渲染总价
    renderSum(){
        let total = 0;
        this.cartGoodsList.forEach(item=>{
            if(item.isChecked){
                total += item.price * item.count;
            }
        });
        this.sumdom.innerHTML = '¥'+total;
    }

    // 勾选/取消勾选
    checkGoods(id){
        this.cartGoodsList.forEach(item=>{
            if(item.id === id){
                item.isChecked = item.isChecked ? false:true;
            }
        });
        this.renderSum();
    }

    // 初始化
    init(){
        this.renderCart();
        this.renderSum();
        // 给每个li加上点击事件
        document.querySelectorAll('input').forEach(item=>{
            item.addEventListener('click',()=>{
                this.checkGoods(item.id);
            });
        });
    }
}

let cart = new Cart();
cart.init();

 

 tsconfig.js配置说明

 摘自:https://juejin.cn/post/6844904008583217165 

// tsconfig.json
{
    "compilerOptions": {
        // 不报告执行不到的代码错误。
        "allowUnreachableCode": true,
        // 必须标注为null类型,才可以赋值为null
        "strictNullChecks": true,
        // 严格模式, 强烈建议开启
        "strict": true,
        // 支持别名导入:
        // import * as React from "react"
        "esModuleInterop": true,
        // 目标js的版本
        "target": "es5",
        // 目标代码的模块结构版本
        "module": "es6",
        // 在表达式和声明上有隐含的 any类型时报错。
        "noImplicitAny": true,
        // 删除注释
        "removeComments": true,
        // 保留 const和 enum声明
        "preserveConstEnums": false,
        // 生成sourceMap    
        "sourceMap": true,
        // 目标文件所在路径
        "outDir": "./lib",
        // 编译过程中需要引入的库文件的列表
        "lib": [
            "dom",
            "es7"
        ],
        // 额外支持解构/forof等功能
        "downlevelIteration": true,
        // 是否生成声明文件
        "declaration": true,
        // 声明文件路径
        "declarationDir": "./lib",
        // 此处设置为node,才能解析import xx from 'xx'
        "moduleResolution": "node"
    },
    // 入口文件
    "include": [
        "src/main.ts"
    ]
}

 

 

 

 

 

【CANoe16安装教程】亲测安装成功 CANoe16安装教程 阅读详情

相关推荐

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 324

TypeScript基础(一阶段)

TypeScript是⼀款开源的编程语⾔,通过在JavaScript的基础上添加静态类型定义构建⽽成。通过TypeScript编译器或Babel转译为JavaScript代码,可运⾏在任何浏览器,任何操作系统。当一个对象上有多个不确定的属性时,就可以使用自定义属性。0: 0,1: 1,2: 2,// 还可以这样写// 看似像一个数组,其实是一个类数组,不能调用数组的属性和方法。

晨的一朵云的博客 252

基于Vector 的AUTOSAR NvM 模块使用

本文主要讲述Vector的两款工具configurator和Developer关于NvM的配置流程,包括如何新建NvM SWC以及添加和修改NvM block,Developer主要涉及NvM SWC的新建、添加新NvM Block以及修改原有的NvM Block;Configurator主要涉及三个模块NvM、Fee以及Fls,以下将分为两个模块对该部分进行介绍。 一、Developer 使用 1.1 新建NvM SWC并实例化 如下图,为Developer左列列表 图 1.1...

Fly_To_Skyhehe的博客 4967

一文带你搞定typescript语法

【代码】typescript系统学习

weixin_44600810的博客 417

Motoman机器人离线编程——Motocom32开发简介

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程——Motocom32开发简介 Motoman机器人离线编程——Visio Studio环境配置 Motoman机器人离线编程——Motocom32库函数的使用与封装 Motoman机器人离线编程——Motocom32参考文献及注意事项 Motoman机器人离线编程——MotocomES介绍 ...

冯Jungle的个人博客 8714

栅格数据做相关性分析前的预处理(批量定义投影、栅格投影、重采样)

最近在做两个栅格数据的相关性分析,这个最主要的是两个栅格数的行列号是一致的(也就是说坐标系、分辨率一致),那么标准的栅格数据的分辨率是以米的形式存在的,但是有一些栅格数据是以度为单位存在的,所以在做分析前,一定要先把其转换为米,否则在重采样的时候就会出错。(相关文章——栅格数据以度为单位变为以米为单位的简单做法)当然,在变其分辨率的单位前,一定要将其坐标系转换为一致。所以就有以下的步骤(如何将两个栅格数据的坐标系、分辨率的单位和分辨率一致) 1.首先,要看两个栅格数据的坐标系是否一致,如果不一致,要先统一到

qq_41828818的博客 8351

typescript 类装饰器 (decorators),应用场景

名词解释 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为。 常见的装饰器 常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器 装饰器的写法:普通装饰器(无法传参) 、 装饰器工厂(可传参) 装饰器是过去几年中js最大的成就之一,已是Es7的标准特性之一 1.类装饰器 1.1、普通装饰器(无法传参) // 普通装饰器(无法传参) fun...

Glacier—john的博客 2031

基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式

至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。

代码让AI扣 1813

TypeScript 中装饰器 decorator 的知识

本文主要介绍关于 TS 中装饰器 Decorator 的相关内容以及使用场景;介绍如何实现一个简单DI依赖注入例子;

weixin_38363139的博客 419

QCC304x系列开发教程(基础篇)之2.1-QCC3040之开发环境搭建

一、安装MDE 1.解压qualcomm_mde.win.2.4_installer_2.4.1.4压缩包,安装MDE_WIN_2.4.1.4_x64.exe,路径自定义 点击NEXT, 安装完成后,点击Finish. 完成安装后,桌面生成快捷方式

心跳包的博客 6079

Agentic AI为教育行业赋能,提示工程架构师解析应用潜力

然而,即便是最先进的 LLMs,在面对复杂、动态、需要持续规划和调整的教育场景时,也常常显得力不从心,它们更像是强大的“问答机器”,而非真正意义上的“学习伙伴”或“教学助手”。在教育场景中,传统的 AI 工具可能只能回答学生提出的特定问题,或者根据预设的规则推送一些学习材料。无论您是教育技术领域的开发者、产品经理,还是一线的教育工作者、教育管理者,抑或是对 AI 教育应用充满好奇的研究者,本文都将为您提供宝贵的 insights,助您把握 Agentic AI 时代教育创新的脉搏。

架构师的AI之路,分享AI应用开发架构的学习与实践。 467

TypeScript 元组(Tuple)

本节介绍元组这一数据类型的定义及其使用,通过元组可以存储不同类型的元素,而非像数组那样只能存储相同元素类型(any[] 除外)。 1. 慕课解释 相同类型元素组成成为数组,不同类型元素组成了元组(Tuple) 2. 定义元组类型 声明一个由string和number构成的元组: const list: [string, number] = ['Sherlock', 1887] // ok const list1: [string, number] = [1887, 'Sh...

hsany330的专栏 684

30天Python入门(第一天:Python入门)

30天带你入门Python,这是第一天

Science prince的博客 584

Vue3+TypeScript 学习记录01

笔者最近在学习李一鸣老师著的《Vue.js3+TypeScript从入门到项目实践》。

mild_breeze的博客 1623

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TypeScript学习记录

初识TypeScript TypeScript是在JavaScript的基础上进行的拓展,它限制变量的类型,兼容所有支持js的平台,更利于代码的维护。 在vscode上运行ts 首先创建了一个文件夹用来记录学习ts的过程 第一步:在该文件夹下面运行npm init ,在当前目录创建一个package.json文件 第二步:运行npm install typescript -g,表示安装ts:-g表示对ts进行全局安装,可以省略掉 注意!ts不能直接运行,需要编译成js才能运行 在终端运行tsc 01.ts将

weixin_51719919的博客 846

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于TypeScript的学习记录

什么是TypeScript TypeScript被称为JavaScript的超集,故名思意,ts的范围只会比js大,所以ts在完全兼容js的基础之上,有了更多东西,ts我理解为更接近后端的语言,类型声明,泛型,枚举等,都和后端语言有很大的共性 基础 基础类型:number boolean string object array undefined void,这些基础类型和js用法一致,不多赘述 1.enum枚举 从一个例子入手 enum ActionType{ Eat, Slee

weixin_48391468的博客 836

Typescript学习记录

学习

u010279658的博客 169

TypeScript 学习记录

文章目录TypeScriptReact+TypeScript安装create-react-app创建新工程修改新工程结构添加material-uirouter安装react-router-dom在App.tsx中配置路由入口在router/index.tsx下配置路由路由懒加载路由跳转withRouter()redux安装Redux创建redux相关文件添加actions添加reducer安装redux-thunk创建store主目录下index引入redux修改数据仓库的值redux-persist持久化

fmk1023的博客 437

TypeScript个人学习记录

一点点个人学习TypeScript的记录

weixin_53401111的博客 178

TypeScript基础学习记录

开坑typescript,记录基础部分的知识点 参考教程:https://github.com/xcatliu/typescript-tutorial 文章目录1、数据类型简单的数据单元:复杂一点的:任意值null和undefined2、类型推论3、联合类型4、接口——Interfaces5、数组的类型类数组any 在数组中的应用6、函数的类型函数声明函数表达式用接口定义函数的形状函数的可选参数参数默认值剩余参数重载7、类型断言语法用途1、将一个联合类型断言为其中一个类型2、将一个父类断言为更加具体的子.

华工Web练习生 518

typescript学习记录

1、typescript初体验 //安装ts编译工具npm i -g typescript //安装ts运行工具npm i -g ts-node console.log("hello typescript"); //控制台输入ts-node 文件名即可 let str: string = "Hello TypeScript"; console.log(str); 2、类型案例 //字符串类型 let string:string = 'Hello TypeScript'; console.lo

温壁 387

TypeScript 学习教程总结

经过一段时间对 TypeScript 的深入学习,我们已经探索了这个强大编程语言的诸多方面。在此,对整个学习过程进行一个全面的总结,以便更好地梳理知识脉络,也为刚接触或正在学习 TypeScript 的朋友们提供一个参考。

菜狗小测试 796
上一篇: 【vue && 上传组件】清除上传组件缓存,使之每次显示新的文件列表
下一篇: 【css】grid布局学习
谭CV
博客等级 码龄9年 73粉丝 85原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值