大厂面试TypeScript套题,看看你能做出几个

某大厂给前端面试者出了一套 TypeScript 笔试题,要求面试者在线实时答题。这种面试题考察的是应聘者的 TS 硬实力,先把题目和要求给出来,你试试能做出来几个。

一、答题要求

1、环境搭建

所有题目均为 NodeJS 环境下,TypeScript 编程题。NodeJS 版本建议 v14 及以上。代码题以本地可以运行通过为准,Node 版本不够则无法运行高版本语法。请提前配置好开发环境。

npm i ts-node -g

2、依赖

NodeJS 环境运行 TS 文件推荐使用 ts-node,建议提前安装。

运行 ts-node 运行第一题命令如下:

ts-node src/1.reverseWord.ts

3、tsconfig.json

{
  "compilerOptions": {
    "target": "es2016", 
    "module": "commonjs", 
    "esModuleInterop": true, 
    "forceConsistentCasingInFileNames": true,
    "strict": true, 
    "skipLibCheck": true 
  }
}

二、笔试题目

1、objToArray.ts

/**
 * @file objToArray
 *
 * 将对象按照要求转为数组
 * 注意console示例运行结果
 */
type Obj = Record<string, string>;
interface FormatItem {
  key: string;
  op: string;
  value: string;
}

function objToArray(obj: Record<string, Obj>): FormatItem[] {
  // 补全此处代码
  throw new Error("功能待实现");
}

console.log(
  objToArray({
    key1: {
      op1: "value1",
    },
    key2: {
      op2: "value2",
    },
  })
);
// result示例
// [
//     {key: 'key1', op: 'op1', value: 'value1'},
//     {key: 'key2', op: 'op2', value: 'value2'}
// ]

export default {};

2、reverseWord.ts

/**
 * @file 反转句子
 * 
 * 同时满足以下条件:1、去除首尾空格,2、单词间隔中多个空格变成一个;
 * 注意console示例运行结果
 */

function reverseWord(str: string) {
	// 补全此处代码
	throw new Error('功能待实现');
}

console.log(reverseWord('the sky is blue')); // blue is sky the
// 去除首尾空格
console.log(reverseWord("  hello world  ")); // world hello
// 单词间隔中多个空格变成一个
console.log(reverseWord("a good   example")); // example good a

export default {}

3、firstSingleChar.ts

/**
 * @file 找出字符串中第一个只出现一次的字符
 */

function firstSingleChar(str: string) {
	// 补全此处代码
	throw new Error('功能待实现');
}

// a 和 b 都出现了两次,只有 c 出现了一次,返回 c
console.log(firstSingleChar('abcba')) // c
// b c d 都出现了一次,返回第一个
console.log(firstSingleChar('aabcdee')) // b
// a 和 b 都出现了多次,没有只出现一次的元素,返回 undefined
console.log(firstSingleChar('aaaabbbb')) // undefined

export default {}

4、mergeArray.ts

/**
 * @file 合并两个有序数组
 */

function merge(arr: number[], arr2: number[]): number[] {
	// 补全此处代码
	throw new Error('功能待实现
### TypeScript 面试常见问及答案 #### 1. TypeScript 的基本概念 TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的超集,添加了可选的静态类型和基于类的面向对象编程。TypeScript 最终会被编译成纯 JavaScript 代码[^1]。 #### 2. 类型声明与类型推断的区别 类型声明是显式地为变量或函数指定类型,而类型推断是 TypeScript 根据赋值语句右侧的值自动推断变量的类型。例如: ```typescript // 类型声明 let x: number; x = 10; // 类型推断 let y = 20; // TypeScript会自动推断y的类型为number ``` 通过类型声明,开发者可以更明确地定义变量的类型,从而提高代码的可读性和安全性[^1]。 #### 3. 接口(Interface)的作用及使用场景 接口在 TypeScript 中用于定义对象的结构,包括属性和方法的名称、类型以及它们之间的关系。接口的主要作用是为类提供一个模板或者契约,确保类按照特定的方式实现。 接口的使用场景包括但不限于以下几种: - 定义对象的形状。 - 描述函数的参数和返回值。 - 作为类型检查器的参考,确保数据符合预期格式。 接口与类型别名(Type Alias)的区别在于: - 接口可以被扩展和重新打开以添加新的成员。 - 类型别名不能被扩展,但可以用来创建联合类型或元组类型[^1]。 #### 4. 类型断言的作用及注意事项 类型断言允许开发者手动指定一个值的类型。例如: ```typescript let someValue: any = "this is a string"; let strLength: number = (someValue as string).length; ``` 需要注意的是,类型断言不会进行实际的类型检查,如果断言不正确,在运行时可能会导致错误[^3]。 #### 5. 模块的概念及其优势 TypeScript 模块提供了一种通过将代码封装到不同文件中来组织和重用代码的方法。模块可以导出和导入到其他文件中,从而更容易跨多个文件和项目重用代码。模块还有助于避免命名冲突并提高代码的可服务性和可扩展性[^4]。 #### 6. 全局类型声明的引入方式 `/// <reference types/>` 可用于引入一些全局的类型声明。例如,在 Web 项目中,可能需要引入 `@types/webpack-env` 来获取 `window`、`document` 等全局对象的类型声明。在项目的相关文件中添加 `/// <reference types="webpack-env" />`,就可以确保在代码中使用这些全局对象时,能够获得准确的类型检查[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值