news 2026/5/1 3:55:36

TypeScript

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript

ts语法特性

  • 类 Classes
  • 接口 Interfaces
  • 模块 Modules
  • 类型注解 Type annotations
  • 编译时类型检查 Compile time type checking
  • Arrow 函数

安装TS

$ npm install -g typescript

编译ts成js文件

tsc filename.ts

TS基础类

布尔值 boolean

let isDone:boolean = false;

数字 number

let age:number = 18

字符串 string

let name:string ="张三"

模板字符串形式:

let name:string = `我的名字${name}`

数组

let arr:number[] =[1,2,3]

let arr:Array<number> = [1,2,3]

元组

let x :[string,number] = ['1',2]

error:

let y :[number,string] = ['1',2] //不能将类型“string”分配给类型“number”

枚举 enum

enum sex {boy='男', gril='女'}

let sex1:sex=sex.boy

任意值 any

let a:any="123"

空值 void

function message(): void {
console.log("Hello")
}
let name:void= null

(只能赋值undefined或null)

Null和Undefined

let name:null = null

let name:undefined = undefined

Never

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}

// 推断的返回值类型为never
function fail() :never{
return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}

类型断言

let myname: any = "zhangsan";

let mynamelen :number = (<string>myname).length

let myname1 :any ="zhangsan"

let myname1len :number = (myname1 as string).length

接口Interface

interface pbjparams {

name: string,//必有

age?:number//可以有

}

let infoobj = {

name: 'zs',

age: 18

}

function namefun(infoobj: pbjparams) {

console.log(infoobj.name)

}

namefun(infoobj)

只读属性 readonly

interface pbjparams {

readonly name: string,

age?:number

}

let infoobj:pbjparams = {

name: 'zs',

}

infoobj.name = 'ls'//无法为“name”赋值,因为它是只读属性

let a: number[] = [1, 2, 3, 4];

let b: ReadonlyArray<number> = a;

b[0]=2 //类型“readonly number[]”中的索引签名仅允许读取

a=b //类型 "readonly number[]" 为 "readonly",不能分配给可变类型 "number[]"。

a = b as number[]//可以:b 当作类型number[]来看待

只读属性 readonly和const 的使用
  • 变量使用const
  • 属性使用 readonly

额外的属性检查

1.断言

interface SquareConfig {

color?: string;

width?: number;

}

function createSquare(config: SquareConfig): { color: string; area: number } {

// ...

return {color:'red', area: 100}

}

let mySquare = createSquare({ colour: "red", width: 100 }) //类型“{ colour: string; width: number; }”的参数不能赋给类型“SquareConfig”的参数。

let mySquare = createSquare({ colour: "red", width: 100 } as SquareConfig)

2.索引签名

interface MyObject

{

name: string;

age: number;

[propName: string]: any; // 允许额外的字符串键属性

}

  • 对象可以有可选属性name(字符串)和 age(数字);
  • 除此之外,还可以有任意其他字符串键名的属性,其值可以是任意类型(any)。
  • 索引签名的值类型必须兼容接口中所有已知属性的类型。//propName: string]: string会报错 改为propName: string]: string|number

只有在以下场景才建议使用:

场景说明
接收外部不可控数据如 API 响应、用户配置文件、第三方库输出
实现类似字典/哈希表的结构例如{ [id: string]: User }
需要高度动态的对象且你愿意放弃部分类型安全
3.将这个对象赋值给一个另一个变量

let squareOptions = { sex: "男",name:'zs' };
let mySquare = createSquare(squareOptions);

函数类型

interface 接口名 {

(参数列表): 返回类型;

}

interface AddFunction {

(a: number, b: number): number;

}

// 使用该接口定义函数

const add: AddFunction = (x, y) => x + y;

// 调用

console.log(add(2, 3)); // 输出 5

字符串索引签名

interface Dict {

[key: string]: number;

}

  • 无论你用什么字符串去访问这个对象(如d["a"]d.foo),TypeScript 都会认为结果是number

interface Dict {

[key: string]: number;

};

let b: Dict = {

"a": 1,

"b": 2

}

console.log(b["a"]); //1

类类型

interface Animal {

name: String;

move(): string

}

class Dog implements Animal {

name: String;

constructor(name: string) {

this.name = name

}

move() {

return '移除方法'

}

}

let p = new Dog('小狗')

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 0:39:33

gRPC连接池优化--高并发场景下,显著提高性能并降低资源消耗

gRPC连接池优化总结1核心改进对比1.1 架构变化优化前:1个stub硬编码地&#xff0c;单连接处理所有请求 优化后:N个stub连接池-并发复用多连接 ​ 这个设计模式适用于需要频繁进行 gRPC 调用的微服务架构&#xff0c;特别是在高并发场景下&#xff0c;连接池可以显著提高性能并降…

作者头像 李华
网站建设 2026/4/25 11:05:45

什么是读写分离?如何实现?

本报告旨在全面、深入地探讨数据库读写分离&#xff08;Read-Write Separation&#xff09;技术。读写分离作为一种关键的数据库架构优化模式&#xff0c;通过将数据库的读操作与写操作分流至不同的服务器实例&#xff0c;极大地提升了现代应用系统的性能、可用性和可扩展性。报…

作者头像 李华
网站建设 2026/4/27 14:33:29

Hourglass:Windows终极倒计时工具完整使用教程

Hourglass是一款专为Windows系统设计的免费开源倒计时软件&#xff0c;为用户提供专业级的时间管理解决方案。这款简单易用的倒计时工具凭借其直观界面和丰富功能&#xff0c;已成为Windows用户在工作和生活中进行精准时间规划的理想选择。 【免费下载链接】hourglass The simp…

作者头像 李华
网站建设 2026/5/1 3:55:34

3步搭建专业表单:React JSON Schema Form实战指南

3步搭建专业表单&#xff1a;React JSON Schema Form实战指南 【免费下载链接】react-jsonschema-form A React component for building Web forms from JSON Schema. 项目地址: https://gitcode.com/gh_mirrors/re/react-jsonschema-form React JSON Schema Form是一个…

作者头像 李华
网站建设 2026/4/30 10:25:03

终极FastAPI性能优化指南:101个实用技巧详解

终极FastAPI性能优化指南&#xff1a;101个实用技巧详解 【免费下载链接】fastapi-tips FastAPI Tips by The FastAPI Expert! 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi-tips FastAPI作为现代Python Web框架的明星&#xff0c;以其出色的性能和易用性…

作者头像 李华
网站建设 2026/4/13 11:16:55

MySQL索引优化侦探对决:SOAR与SQLAdvisor的实战破案手册

MySQL索引优化侦探对决&#xff1a;SOAR与SQLAdvisor的实战破案手册 【免费下载链接】Archery hhyo/Archery: 这是一个用于辅助MySQL数据库管理和开发的Web工具。适合用于需要管理和开发MySQL数据库的场景。特点&#xff1a;易于使用&#xff0c;具有多种数据库管理功能&#x…

作者头像 李华