2024/2/6学习记录

ts

因为已经学习过了 js ,下面的都是挑了一些 ts 与 js 不同的地方来记录。

安装

npm install -g typescript

安装好之后,可以看看自己的版本

ts基础语法

模块  函数  变量  语法和表达式  注释

编译 ts 文件需要用 tsc xxx.ts ,js 文件是用 node 去编译

ts是一个面向对象的编程语言

ts 的数据类型

  • number  双精度64位浮点数,可以用来表示整数和分数
  • string  字符串
  • boolean 布尔类型
  • 数组类型
  • 元组类型 用来表示 已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同

示例:

  • enum  枚举 用于定义数值集合
  • void  用于标识方法返回值,表示该方法没有返回值
  • null   表示对象值缺失
  • never  是其他类型 包括 null 和 undefined 的子类型,代表从不会出现的值
  • Any类型

任意值 Any 类型

是 ts 针对编程时类型不明确的变量使用的一种数据类型,它常用于以下三种情况:

  • 变量的值会动态改变
  • 改写现有代码时,任意值允许在编译时可选择地包含或移除类型检查
  • 定义存储各种数据类型的数组时
  • Null 和 Undefined

ts 变量声明

格式:

需要指定类型,倘若没有指定类型,初始值就是 undefined

变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现重名

需要编译 ts 代码 需要先 用 tsc 编译成 js 文件,再用 node 去编译 js 文件。

类型断言

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改位 另外一种类型。

语法:

var str = '1' 
var str2:number = <number> <any> str   //str、str2 是 string 类型
console.log(str2)

类型断言纯粹是一个编译时语法,同时 它也是一种为 编译器提供关于如何分析代码的方法。

类型推断

当类型没有给出时,ts 编译器利用类型推断类型,如果由于缺乏声明而不能推断出类型,那么它的类型将被视作动态的 any 类型

变量作用域

ts 一共有三种

  • 全局作用域
  • 类作用域
  • 局部作用域

函数定义:

function function_name():return_type { 
    // 语句
    return value; 
}
函数带参数:
function add(x: number, y: number): number {
    return x + y;
}
console.log(add(1,2))

和 js 还是有些不同的

构造函数

ts 支持使用 js 内置的构造函数来定义函数

语法:

var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)

实例:

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

编译后的 js 代码:

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

函数重载

  • 参数类型不同
function disp(string):void; 
function disp(number):void;
  • 参数数量不同
function disp(n1:number):void; 
function disp(x:number,y:number):void;
  • 参数类型顺序不同
function disp(n1:number,s1:string):void; 
function disp(s:string,n:number):void;

如果参数类型不同,则参数类型应设置为 any,参数数量不同可以将不同的参数设置为可选

实例:

function disp(s1:string):void; 
function disp(n1:number,s1:string):void; 
 
function disp(x:any,y?:any):void { 
    console.log(x); 
    console.log(y); 
} 
disp("abc") 
disp(1,"xyz");

联合类型

可以通过  |  运算符 将变量设置多种类型,赋值时可以根据设置的类型来赋值,只能赋值指定的类型,如果赋值其他类型就会报错。

实例:

var val:string|number 
val = 12 
console.log("数字为 "+ val) 
val = "Runoob" 
console.log("字符串为 " + val)

也可以将联合类型作为函数参数使用

实例:

function disp(name:string|string[]) { 
        if(typeof name == "string") { 
                console.log(name) 
        } else { 
                var i; 
                for(i = 0;i<name.length;i++) { 
                console.log(name[i])
                } 
        } 
} 
disp("Runoob") 
console.log("输出数组....") 
disp(["Runoob","Google","Taobao","Facebook"])

ts 接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

interface interface_name { 
}

实例:

interface IPerson { 
    firstName:string, 
    lastName:string, 
    sayHi: ()=>string 
} 
 
var customer:IPerson = { 
    firstName:"Tom",
    lastName:"Hanks", 
    sayHi: ():string =>{return "Hi there"} 
} 
 
console.log("Customer 对象 ") 
console.log(customer.firstName) 
console.log(customer.lastName) 
console.log(customer.sayHi())  
 
var employee:IPerson = { 
    firstName:"Jim",
    lastName:"Blakes", 
    sayHi: ():string =>{return "Hello!!!"} 
} 
 
console.log("Employee  对象 ") 
console.log(employee.firstName) 
console.log(employee.lastName)

联合类型和接口的实例:

interface RunOptions { 
    program:string; 
    commandline:string[]|string|(()=>string); 
} 
 
// commandline 是字符串
var options:RunOptions = {program:"test1",commandline:"Hello"}; 
console.log(options.commandline)  
 
// commandline 是字符串数组
options = {program:"test1",commandline:["Hello","World"]}; 
console.log(options.commandline[0]); 
console.log(options.commandline[1]);  
 
// commandline 是一个函数表达式
options = {program:"test1",commandline:()=>{return "**Hello World**";}}; 
 
var fn:any = options.commandline; 
console.log(fn());

接口和数组

接口中,我们可以将 数组的索引值和元素设置为不同类型,索引值可以是数组或字符串

接口继承

使用 关键字 extends 

实例:

interface Person { 
   age:number 
} 
 
interface Musician extends Person { 
   instrument:string 
} 
 
var drummer = <Musician>{}; 
drummer.age = 27 
drummer.instrument = "Drums" 
console.log("年龄:  "+drummer.age)
console.log("喜欢的乐器:  "+drummer.instrument)

ts 类

ts 类定义方式如下:

class class_name { 
    // 类作用域
}

static 关键字

static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。

instanceof 运算符

instanceof 运算符用于判断对象是否是指定的类型,如果是返回 true,否则返回 false。

实例:

class Person{ } 
var obj = new Person() 
var isPerson = obj instanceof Person; 
console.log("obj 对象是 Person 类实例化来的吗? " + isPerson);

访问控制修饰符

TypeScript 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。TypeScript 支持 3 种不同的访问权限。

  • public

公有,可以在任何地方被访问

  • protected

受保护,可以被其自身以及其子类访问

  • private

私有,只能被其定义所在的类访问。

类和接口

类可以实现接口,使用 关键字 implements 

实例:

interface ILoan { 
   interest:number 
} 
 
class AgriLoan implements ILoan { 
   interest:number 
   rebate:number 
   
   constructor(interest:number,rebate:number) { 
      this.interest = interest 
      this.rebate = rebate 
   } 
} 
 
var obj = new AgriLoan(10,1) 
console.log("利润为 : "+obj.interest+",抽成为 : "+obj.rebate )

ts 类型模板

在对象中添加方法不能这样写:

对象.方法=function(){  //TODO  }

在  ts  中这样写会出现编译错误,是因为 ts 中的对象必须是特定类型的实例

ts 泛型

泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。

泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。

使用泛型的主要目的是为了处理不特定类型的数据,使得代码可以适用于多种数据类型而不失去类型检查。

优势:

  • 代码重用
  • 类型安全
  • 抽象性

泛型函数实例:

function identity<T>(arg: T): T {
    return arg;
}

// 使用泛型函数
let result = identity<string>("Hello");
console.log(result); // 输出: Hello

let numberResult = identity<number>(42);
console.log(numberResult); // 输出: 42
泛型接口

可以使用泛型来定义接口,使接口的成员能够使用任意类型

实例:

// 基本语法
interface Pair<T, U> {
    first: T;
    second: U;
}

// 使用泛型接口
let pair: Pair<string, number> = { first: "hello", second: 42 };
console.log(pair); // 输出: { first: 'hello', second: 42 }

ts 命名空间

命名空间是为了解决重名问题  关键字:namespace 

命名空间定义了标识符的可见范围,一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

实例:

namespace SomeNameSpaceName { 
   export interface ISomeInterfaceName {      }  
   export class SomeClassName {      }  
}

调用的格式为:

SomeNameSpaceName.SomeClassName;

如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:

/// <reference path = "SomeFileName.ts" />

ts 模块

模块是在其自身的作用域里执行,并不是在全局作用域,这意味着定义在模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

实例:

导出模块

/// <reference path = "IShape.ts" /> 
export interface IShape { 
   draw(); 
}

导入使用:

import shape = require("./IShape"); 
export class Circle implements shape.IShape { 
   public draw() { 
      console.log("Cirlce is drawn (external module)"); 
   } 
}

uni-app

是一个使用 vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 IOS  Android  H5 以及各种小程序,快应用等多个平台。

开发工具

官方推荐使用 HbuilderX 来开发 uni-app 类型的项目

好处:

  • 模板丰富
  • 完善的智能提示
  • 一键运行

安装 HBuilderX 

HBuilderX-高效极客技巧 (dcloud.io)

安装 Sass

scss/sass编译 - DCloud 插件市场

配置个性化设置

代码:

{
    "editor.colorscheme": "Default",
	"editor.fontsize": 12,
    "editor.fontFamily":"consolas",
	"editor.fontFmyCHS":"微软雅黑 Light",
	"editor.insertSpaces": true,
	"editor.lineHeight":"1.5",
	"editor.minimap.enabled": false,
	"editor.mouseWheelZoom": true,
	"editor.onlyHighlightWord":false,
	"editor.tabsize":2,
    "editor.wordwrap":true,
	"explorer.iconTheme":"vs-seti",
	"editor.codeassist.px2rem.enabel":false,
	"editor.codeassist.px2upx.enabel":false
}

相关推荐

  1. 学习记录————

    2024-02-07 15:20:02       45 阅读
  2. mysql学习记录

    2024-02-07 15:20:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 15:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 15:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 15:20:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 15:20:02       20 阅读

热门阅读

  1. 【seata自动化治愈数据库问题解决方案】

    2024-02-07 15:20:02       36 阅读
  2. λ-矩阵知识点

    2024-02-07 15:20:02       53 阅读
  3. rancher迁移账号密码

    2024-02-07 15:20:02       34 阅读
  4. spring 熔断机制

    2024-02-07 15:20:02       31 阅读
  5. 自定义指令实现图片懒加载

    2024-02-07 15:20:02       33 阅读
  6. CentOS 7 安装 install abiword

    2024-02-07 15:20:02       32 阅读
  7. 【Python】案例:多维列表拆分和去重

    2024-02-07 15:20:02       29 阅读
  8. c# json字符串转Oracle的insert into的小程序

    2024-02-07 15:20:02       32 阅读
  9. LeetCode210. Course Schedule II——拓扑排序

    2024-02-07 15:20:02       27 阅读
  10. 小程序:windows下C++调用打印机过程简介

    2024-02-07 15:20:02       31 阅读
  11. 傅里叶变换在图像处理中的应用

    2024-02-07 15:20:02       30 阅读