当前位置: 首页 > news >正文

TS面试题

1.TS有哪些类型(对比与js)?

关键字/语法

用途

示例

any

关闭类型检查

let a: any = 4

unknown

类型安全的 any

let u: unknown = 4; if (typeof u === 'number') …

never

永不存在的值

function err(): never { throw 0; }

void

无返回值

function f(): void {}

enum / const enum

枚举

enum Color { Red = 1 }

union(联合)

“或”关系

string | number

intersection(交叉)

“且”关系

A & B

literal(字面量)

精确值

'GET' / 404 / true

readonly

只读属性

readonly x: number

? 可选属性

interface P { name?: string }

keyof

取键联合

keyof {a:1,b:2} → `'a'

typeof

取变量类型

let p = {x:1}; type T = typeof p

as 类型断言

(<HTMLElement>el).style

satisfies (4.9+)

保证表达式符合某类型并推断更精确类型

条件类型

T extends U ? X : Y

infer

在条件类型里提取子类型

映射类型

{ [K in keyof T]: T[K] }

模板字符串类型

` `user-${number}` `

2.type和interface的区别?何时用哪个?

在 90 % 的日常代码里两者可以互换;但 interface 可以同名自动合并被类实现/继承,而 type 可以做联合、交叉、元组等更复杂的复合类型。官方推荐:描述对象形状优先用 interface,需要组合、映射、条件类型时用 type

维度

interface

type

官方定位

描述“对象形状”(shape / contract)

描述任意“类型表达式”

能否同名合并(Declaration Merging)

✅ 自动合并
interface A {x:1}
interface A {y:2}{x:1,y:2}

❌ 重复定义即报错

继承 / 实现

extends 另一 interface
implements by class

❌ 不能被类实现

联合类型(|)

❌ 不支持

type T = A|B

交叉类型(&)

❌ 不支持

type T = A & B

元组 / 映射 / 条件 / infer

❌ 不支持

✅ 支持全部高级类型体操

基本对象描述

interface P {name:string}

type P = {name:string}

递归类型

✅ 支持

✅ 支持

运行时表现

完全擦除,无差异

完全擦除,无差异

对象、继承、合并用 interface;其余复杂场景用 type

3.什么是类型断言?如何使用?

类型断言(Type Assertion) 就是「开发者比编译器更懂类型,手动告诉它」的语法糖;它只在 编译阶段 起作用,运行时无任何效果

语法

示例

备注

尖括号(不推荐 JSX 环境)

<HTMLElement>document.querySelector('#app')

易与 JSX 混淆

as 写法(推荐)

document.querySelector('#app') as HTMLElement

通用、可读性高

4.什么是泛型

泛型是一种在定义函数、接口或类时不预先指定具体类型,而在使用时再指定类型的特性

T(或其他大写字母)作为“泛型”占位符,让同一段代码能够复用于不特定的数据类型

// 一颗星 T:传入什么类型,就返回什么类型
function echo<T>(value: T): T {return value;
}echo<string>('hello'); // T 点亮成 string
echo<number>(42);      // T 点亮成 number

5.装饰器是什么,如何使用?

装饰器是一种特殊类型的声明,可以附加到类、方法、访问符、属性或参数上。本质是函数

// 类装饰器
function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
}@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;}
}// 方法装饰器
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {let originalMethod = descriptor.value;descriptor.value = function(...args: any[]) {console.log(`Calling ${propertyKey} with`, args);return originalMethod.apply(this, args);};return descriptor;
}class Calculator {@logadd(x: number, y: number) {return x + y;}
}

6.讲解一下ts的枚举?

TypeScript 枚举在编译期生成一个键值双向映射对象(数字 enum)或单向对象(字符串 enum),既能当类型又能当;使用 const enum 可彻底消除运行时开销

TypeScript 中的枚举(Enums)是一种特殊的对象类型,它允许我们定义一组命名常量。这使得代码更具可读性和可维护性,尤其是在处理一组固定的值时非常有用。

enum Direction {Up,Down,Left,Right,
}
console.log(Direction.Up); // 输出 0

enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}
console.log(Direction.Up); // 输出 "UP"
http://www.dtcms.com/a/302056.html

相关文章:

  • 数据库概述(学习笔记)
  • 墨者:SQL注入漏洞测试(宽字节)
  • IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)
  • 自学嵌入式 day36 数据库
  • 《Go Web编程实战派--从入门到精通》的随笔笔记
  • 当非洲爱上“中国制造”:如何赢在起跑线
  • 【Oracle】闪回相关操作
  • UV安装并设置国内源
  • easyexcel填充方式导出-合并单元格并设置边框
  • QML QtCharts 极坐标图(PolarChartView)
  • 【WRF-Chem第二期】WRF-Chem有关 namelist 详解
  • 学习lxml库:Python XML/HTML处理利器
  • 安宝特方案丨智能革新安全管控:AR技术赋能物流仓储行业安全升级
  • C++中既重要又困难的部分—类和对象
  • Pandas 里的分箱操作
  • 《Linux服务与安全管理》| samba服务器配置匿名模式
  • 数据结构——图(二、图的存储和基本操作)
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • 设计模式(二十)行为型:观察者模式详解
  • 常用设计模式系列(十五)—解释器模式
  • 修改CentOS的SSH登录端口(22端口)
  • python任意模块间采用全局字典来实现借用其他类对象的方法函数来完成任务或数据通信的功能
  • STM32入门之DMA直接存储器存取
  • 第4章唯一ID生成器——4.3 基于时间戳的趋势递增的唯一ID
  • Java 排序
  • LeetCode 刷题【18. 四数之和】
  • Flutter实现Android原生相机拍照
  • 如何在技术世界中保持清醒和高效
  • iphone手机使用charles代理,chls.pro/ssl 后回车 提示浏览器打不开该网页
  • NI Ettus USRP X440 软件无线电