TypeScript:给JavaScript加上类型安全

TypeScript 的核心优势

TypeScript 是 JavaScript 的超集,通过静态类型检查增强了代码的可靠性。类型系统能在编译阶段捕获潜在错误,减少运行时异常。

基础类型注解

变量声明时可直接标注类型:

typescript 复制代码
let username: string = "Alice";
let age: number = 30;
let isActive: boolean = true;

数组和元组类型:

typescript 复制代码
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["text", 42];

接口与类型别名

接口定义对象结构:

typescript 复制代码
interface User {
  id: number;
  name: string;
  email?: string; // 可选属性
}

类型别名支持更复杂的类型组合:

typescript 复制代码
type Point = {
  x: number;
  y: number;
};
type ID = string | number;

函数类型约束

参数和返回值类型标注:

typescript 复制代码
function greet(name: string): string {
  return `Hello, ${name}`;
}

箭头函数类型:

typescript 复制代码
const add: (x: number, y: number) => number = (x, y) => x + y;

泛型应用

创建可复用的类型组件:

typescript 复制代码
function identity<T>(arg: T): T {
  return arg;
}

泛型约束示例:

typescript 复制代码
interface Lengthwise {
  length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
  console.log(arg.length);
  return arg;
}

类型推断与断言

自动类型推断:

typescript 复制代码
let inferredString = "text"; // 自动推断为string类型

类型断言语法:

typescript 复制代码
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

高级类型技巧

联合类型与交叉类型:

typescript 复制代码
type Admin = User & { privileges: string[] };

索引签名处理动态属性:

typescript 复制代码
interface StringArray {
  [index: number]: string;
}

编译配置

tsconfig.json 关键配置项:

json 复制代码
{
  "compilerOptions": {
    "target": "ES6",
    "strict": true,
    "module": "commonjs"
  }
}

类型声明文件

3r.ninequeen2228.com

jy.ninequeen2228.com

5z.ninequeen2228.com

da.ninequeen2228.com

vn.ninequeen2228.com

bc.ninequeen2228.com

gz.ninequeen2228.com

uj.ninequeen2228.com

9l.ninequeen2228.com

dh.ninequeen2228.com

x3.ninequeen2228.com

4e.ninequeen2228.com

xl.ninequeen2228.com

pb.ninequeen2228.com

o4.ninequeen2228.com

nq.ninequeen2228.com

e2.ninequeen2228.com

gx.ninequeen2228.com

3f.ninequeen2228.com

us.ninequeen2228.com

8p.ninequeen2228.com

qa.ninequeen2228.com

kj.ninequeen2228.com

9u.ninequeen2228.com

dy.ninequeen2228.com

kg.ninequeen2228.com

ok.ninequeen2228.com

jb.ninequeen2228.com

cw.ninequeen2228.com

ih.ninequeen2228.com

td.ninequeen2228.com

ob.ninequeen2228.com

z1.ninequeen2228.com

ep.ninequeen2228.com

d7.ninequeen2228.com

cp.ninequeen2228.com

t4.ninequeen2228.com

l1.ninequeen2228.com

ls.ninequeen2228.com

pt.ninequeen2228.com

tp.ninequeen2228.com

hr.ninequeen2228.com

hi.ninequeen2228.com

7k.ninequeen2228.com

l4.ninequeen2228.com

9j.ninequeen2228.com

ig.ninequeen2228.com

ac.ninequeen2228.com

fo.ninequeen2228.com

ev.ninequeen2228.com

p4.ninequeen2228.com

gm.ninequeen2228.com

4o.ninequeen2228.com

1x.ninequeen2228.com

ej.ninequeen2228.com

fd.ninequeen2228.com

no.ninequeen2228.com

cq.ninequeen2228.com

yz.ninequeen2228.com

if.ninequeen2228.com

ns.ninequeen2228.com

ir.ninequeen2228.com

dx.ninequeen2228.com

9e.ninequeen2228.com

pj.ninequeen2228.com

x1.ninequeen2228.com

u5.ninequeen2228.com

4h.ninequeen2228.com

eu.ninequeen2228.com

st.ninequeen2228.com

iz.ninequeen2228.com

vt.ninequeen2228.com

p6.ninequeen2228.com

23.ninequeen2228.com

fn.ninequeen2228.com

fg.ninequeen2228.com

14.ninequeen2228.com

0d.ninequeen2228.com

4c.ninequeen2228.com

wn.ninequeen2228.com

4r.ninequeen2228.com

uq.ninequeen2228.com

dv.ninequeen2228.com

90.ninequeen2228.com

c3.ninequeen2228.com

xp.ninequeen2228.com

e6.ninequeen2228.com

c6.ninequeen2228.com

r4.ninequeen2228.com

h1.ninequeen2228.com

fa.ninequeen2228.com

p3.ninequeen2228.com

ui.ninequeen2228.com

3j.ninequeen2228.com

er.ninequeen2228.com

5w.ninequeen2228.com

t1.ninequeen2228.com

um.ninequeen2228.com

a4.ninequeen2228.com

aa.ninequeen2228.com

为第三方库添加类型支持:

typescript 复制代码
declare module 'untyped-lib' {
  export function doSomething(): void;
}
相关推荐
ℋᙚᵐⁱᒻᵉ鲸落5 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙6 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
এ慕ོ冬℘゜7 小时前
navigator 导航对象 BOM制作方法
javascript
kyriewen10 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试
Jacky199911 小时前
Electron + Vue 3 桌面打字游戏实战:从 VSCode 扩展到独立应用的架构改造
javascript
柚yuzumi12 小时前
别再猜 this:先看它属于谁,再看它指向谁
前端·javascript
汉堡大王952712 小时前
面试必考:手写代码 new 做了什么?从原理到实现全解析
前端·javascript·面试
BillKu13 小时前
TypeScript中,字符串字面量联合类型(Union Type)、enum的用法说明
前端·javascript·typescript
顶级自由人15 小时前
本地正常、线上正常,为什么一个 Hook 仍会报错?
前端·javascript·程序员
lerhxx15 小时前
R3F 第一人称漫游与碰撞检测:Pointer Lock + 不穿墙的滑墙秘诀(中)
前端·javascript·three.js