news 2026/4/7 1:53:48

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/3/30 1:57:44

3个理由告诉你为什么《韭菜的自我修养》是投资新手的必读宝典

3个理由告诉你为什么《韭菜的自我修养》是投资新手的必读宝典 【免费下载链接】韭菜的自我修养电子版资源介绍分享 《韭菜的自我修养》电子版资源介绍本仓库提供《韭菜的自我修养》一书的电子版资源下载&#xff0c;包括PDF、MOBI和EPUB格式&#xff0c;方便读者在不同设备上阅…

作者头像 李华
网站建设 2026/4/4 7:20:25

数据挖掘学习新纪元:韩家炜第四版PPT课件完整指南

数据挖掘学习新纪元&#xff1a;韩家炜第四版PPT课件完整指南 【免费下载链接】数据挖掘概念与技术韩家炜第四版PPT课件全 《数据挖掘&#xff1a;概念与技术》韩家炜第四版 PPT 课件&#xff0c;完整覆盖原书12章内容&#xff0c;专为数据挖掘学习者设计。课件基于2022年最新版…

作者头像 李华
网站建设 2026/4/3 6:43:53

9、Unix/Linux 系统维护与备份策略全解析

Unix/Linux 系统维护与备份策略全解析 1. 系统信息查看 在日常系统维护中,我们首先要了解系统的基本信息。例如在 10:47 am 时,系统已运行 27 天 50 分钟,有 1 个用户,负载平均值为 0.18、0.26、0.20。 2. syslog 信息解读 一个配置良好的 syslog 是任何 *NIX 系统中最重…

作者头像 李华
网站建设 2026/4/4 20:20:13

22、网络安全:入侵检测与防火墙的实用指南

网络安全:入侵检测与防火墙的实用指南 1. 入侵检测系统概述 入侵检测系统(IDS)用于识别网络内的可疑活动或检测入侵行为。它通过规则匹配算法来检测数据包或模式,以判断是否存在入侵、病毒爆发或其他不良活动。不过,有些“合法”活动可能与入侵或病毒爆发的规则非常接近…

作者头像 李华
网站建设 2026/3/30 15:19:46

GPT-5.2深度拆解:多档位自适应架构如何重塑AI推理效率

GPT-5.2深度拆解&#xff1a;多档位自适应架构如何重塑AI推理效率 一、热点直击&#xff1a;12 月 12 日 OpenAI 的 “算力革命” 就在今天&#xff08;2025 年 12 月 12 日&#xff09;&#xff0c;OpenAI 突然向付费用户推送了 GPT-5.2 模型更新&#xff0c;没有盛大发布会&a…

作者头像 李华