面试题:https://github.com/semlinker/awesome-typescript/discussions
TS 体操:https://github.com/semlinker/awesome-typescript/issues
1. 聊聊你对 TS 类中 public、private、protected、readonly 修饰符的理解?
题目地址:点击查看
按照字面意思先看下这几个词:
- public:公共的,公开的;
- private:私有的,私人的;
- protected:受保护的;
- readonly:只读的;
从这几个词的含义,大致知道这几个修饰符是做啥事的。
在 TypeScript 的类中,可以用这几个修饰符来修饰其中的属性或方法。其中:
public
修饰符是默认成员属性或方法都是,可以在任何地方访问;private
修饰符修饰的属性或方法是私有的,不能在声明它的类的外部访问;protected
修饰符修饰的属性或方法将受保护,仅仅只能在其子类中访问;readonly
修饰符修饰的属性只读,只允许出现在属性声明或者索引签名或者构造函数中,可以防止被修改;
文档地址:
2. TypeScript 中 const 和 readonly 的区别?
题目地址:点击查看
先看看两者作用:
const
声明一个常量,在定义时可以赋值,之后都不能修改;readonly
修饰符修饰的属性只读,无法修改,必须定义在属性或索引签名或构造函数。
实质上,我们定义属性时通过 readonly
修饰属性后,可以防止被重新赋值,但这只是在编译时进行检查,编译完成后,readonly
就会被去除,而 const
定义的变量,在运行时也会进行检查。
详细分析可以看看:Difference between const and readonly in typescript
3. 列举你工作中常用的 TS 内置工具类型并描述一下它们的作用
题目地址:点击查看
业务中常用的比较多:
Partial<Type>
:将指定类型的所有属性转换为可选类型,并且返回转换后的新类型;Pick<Type, Keys>
:从指定类型中,选择一组需要的类型,并且返回选择后的新类型。常常在定义子类型的时候会去取。
完整的内置工具类型,可以查看官方文档学习:Utility Types
4. TypeScript 中 any、never、unknown、null & undefined 和 void 有什么区别?
题目地址:点击查看
每个类型作用如下:
any
:表示任意类型,不做约束,是 TS 不写类型声明时的默认类型,编译时会直接跳过其类型检查。
let name: any = 'leo';
name = 999;
name = true;
// ...
详细介绍可以看文档:any
never
:表示永不存在的类型,TypeScript 2.0 引入,出现永不存在的返回类型的场景有”函数内执行出错,抛出异常,就不会有返回值“,比如:// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
never
类型是所有类型的子类型,它可以赋值给任何类型;同时也没有类型是never
的子类,除了never
自身。 即使 any也不可以赋值给never。
详细介绍可以看文档:neverunknown
:表示未知类型,TypeScript 3.0 引入,当不确定类型的时候可以使用,它可以被赋值给任何类型,但不能被赋值给出了any
和unknown
之外的类型,并且不允许执行unknown
类型的变量方法(any
可以)。let name: unknown = 'leo';
name = 999;
name.toString(); // Object is of type 'unknown'.(2571)
详细介绍可以看文档:unknown
null & undefined
:这是两种 TS 的类型,默认情况下,null
和undefined
是所有类型的子类型,可以
详细介绍可以看文档:null and undefined
void
:表示无任何类型,可以理解成和any
类型相反,当函数没有任何返回值时使用,隐式返回undefined
,当变量声明为void
类型时,该变量可以分配给undefined
、null
或者void
类型的值。
注意:如果 ts 配置文件设置了 "strictNullChecks": false
,则分配 null
类型的值也报错。
详细介绍可以看文档:void