news 2026/7/22 7:33:05

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/7/22 1:35:50

EasyPoi 数据脱敏

结果规则Controller层 CrossOriginGetMapping("/exportStudentsDesensitization")public void exportStudentsDesensitization(HttpServletResponse response) throws IOException {List<Student> studentList studentService.list();List<StudentExportDe…

作者头像 李华
网站建设 2026/7/21 10:24:23

收藏必备!GPT-5.2震撼发布:OpenAI反击战,职场程序员的AI新神器

OpenAI发布GPT-5.2模型回应Google Gemini竞争&#xff0c;推出三版本。GPT-5.2 Thinking在44个职业任务中70.9%超越人类专家&#xff0c;编程能力创测试新高&#xff0c;长文本处理接近100%准确率&#xff0c;幻觉率降低30%。模型强调创造经济价值&#xff0c;为职场人士提供高…

作者头像 李华
网站建设 2026/7/21 5:09:04

3步上手Sparta:让网络安全渗透测试变得像玩游戏一样简单

你是否曾经觉得网络安全渗透测试太复杂&#xff0c;各种工具配置让人头疼&#xff1f;&#x1f914; 今天我要向你介绍Sparta——这款让网络基础设施扫描和枚举变得简单直观的Python GUI工具。无论你是安全新手还是经验丰富的渗透测试人员&#xff0c;Sparta都能帮你节省大量时…

作者头像 李华
网站建设 2026/7/21 11:41:52

Android媒体画廊应用终极指南:轻量级隐私保护的完美选择

Android媒体画廊应用终极指南&#xff1a;轻量级隐私保护的完美选择 【免费下载链接】Gallery Light-weight Media Gallery app for Android made with Jetpack Compose 项目地址: https://gitcode.com/gh_mirrors/galler/Gallery 在当今智能手机成为生活必需品的时代&a…

作者头像 李华
网站建设 2026/7/21 16:13:24

FT8371A,FT8371B,FT8371C 次边同步整流芯片典型应用资料分析

FT8371 是次边同步整流芯片&#xff0c;内置同步整流 MOS&#xff0c;适用于 DCM/QR 模式反激转换器&#xff0c;主打高效率、少外围、易集成&#xff0c;核心用于 5V 中小功率充电器与适配器&#xff0c;已形成 A/B/C 三款主力型号&#xff0c;FT8371A,FT8371B,FT8371C。FT837…

作者头像 李华
网站建设 2026/7/21 9:27:24

智慧文旅信创落地新标杆:四川省文旅厅完成MySQL 5.7平滑替换,筑牢省级管理平台自主可控底座

在国家全面推进数字政府与信息技术应用创新深度融合的背景下&#xff0c;对开源技术依赖的风险治理正成为关键领域安全体系建设的重要一环。2025年3月&#xff0c;四川省文化和旅游厅成功将其核心业务系统——“智游天府综合管理平台”的底层数据库&#xff0c;由原MySQL 5.7单…

作者头像 李华