news 2026/7/14 6:08:15

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/13 16:59:09

揭秘!这几家撕碎机源头厂家,为何让同行都抢着合作?

《撕碎机哪家好&#xff1a;专业深度测评与排名前五榜单》开篇&#xff1a;测评背景与目的在工业固废处理、资源回收等领域&#xff0c;撕碎机作为核心预处理设备&#xff0c;其性能直接关系到生产效率与运营成本。市场上品牌众多&#xff0c;性能参差不齐&#xff0c;如何选择…

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

如何快速上手Hunyuan3D-2.1:新手完整3D创作指南

如何快速上手Hunyuan3D-2.1&#xff1a;新手完整3D创作指南 【免费下载链接】Hunyuan3D-2.1 腾讯开源项目Hunyuan3D-2.1&#xff0c;一站式图像到3D、文本到3D生成解决方案&#xff0c;轻松打造高分辨率纹理的3D资产。基于先进的扩散模型&#xff0c;助力创意无限&#xff0c;开…

作者头像 李华
网站建设 2026/7/7 1:43:36

主键、外键和唯一键的区别和作用是什么?

本报告旨在对关系型数据库管理系统&#xff08;RDBMS&#xff09;中三个基本且至关重要的概念——主键&#xff08;Primary Key&#xff09;、外键&#xff08;Foreign Key&#xff09;和唯一键&#xff08;Unique Key&#xff09;——进行一次系统性、深层次的剖析。在现代数据…

作者头像 李华
网站建设 2026/7/13 15:13:53

ImageProcessing:终极图像处理解决方案的完整指南

ImageProcessing&#xff1a;终极图像处理解决方案的完整指南 【免费下载链接】image_processing High-level image processing wrapper for libvips and ImageMagick/GraphicsMagick 项目地址: https://gitcode.com/gh_mirrors/im/image_processing 在当今数字化时代&a…

作者头像 李华