TypeScript 杂记一

Posted 左手121

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript 杂记一相关的知识,希望对你有一定的参考价值。

TypeScript 杂记一

stringString 的区别

  • string 是一个 TypeScript 的基础数据类型
  • String 是一个构造函数,通过 new 可以创建一个实例对象。直接使用返回的是一个类型是 string 的变量
const a: String = new String("a");
typeof a === "object";
typeof a.toString() === "string";

const b: string = String("b");
typeof b === "string";
  • TypeScript 中其对应的类型定义如下
interface RelativeIndexable<T> 
  at(index: number): T | undefined;

interface String extends RelativeIndexable<string> 
  • 类似的还有 numberboolean

anyunknownnevervoid 区别

  • any: 用于描述任意类型的变量,编译时会跳过对其的类型检查
    • 会导致很多问题出现,例如:使用不存在的属性或者函数等不会报错。
    • 建议能不用 any 就不用 any ,如果非要使用请使用 unknown 代替
  • unknown: 用于描述未知类型的变量
    • any 一样所有的类型都可以分配给它
    • 该类型的变量只能赋值给 anyunknown 类型的变量
    • 不允许访问其属性和方法
const a: unknown = new String("a");
let b: any = "b";
let c = "c";

b = a;
// 不能将类型“unknown”分配给类型“number”。ts(2322)
c = a;
// 对象的类型为 "unknown"。ts(2571)
a.toString();

const d: unknown = "d";
// 使用类型断言
(d as string).toLowerCase();
// 使用类型守卫
if (typeof d === "string") 
  d.toLowerCase();

// 注意 any 也可以使用断言和守卫,但是 unknown 本身就存在很强的防御性,因此使用 unknown 替代 any
  • never: 永不存在的值的类型
    • 除了本身类型之外不允许任何类型的变量赋值,any 也不行
    • 常用于构造条件类型来组合出更灵活的类型定义
// 用于抛出异常,永远不存在返回
function onError(message: string): never 
  throw new Error(message);


// 死循环,永远不存在返回
function onLoop(): never 
  while (true) 


// 如果 T 是 U 的子集,则返回 never,否则返回 T
type Exclude<T, U> = T extends U ? never : T;
// 1 是 1 | 4 | 5 的子集,则返回 never
// 2 不是,返回 2
// 3 不是,返回 3
// 则 type A = never | 2 | 3
// 即 type A = 2 | 3
type A = Exclude<1 | 2 | 3, 1 | 4 | 5>;
  • void: 正好与 any 相反,表示无任何类型
    • 在函数使用则表示没有返回值或者返回 undefined
    • 在变量使用则只能为它赋予 undefined 和 void 类型的值
    • 在不开启 strictNullChecks 情况下也可以是 null

以上是关于TypeScript 杂记一的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 杂记十 《断言函数》

TypeScript 杂记一

TypeScript 杂记一

TypeScript 杂记十二 《Multiply》

TypeScript 杂记九 《Integers Comparator》

TypeScript 杂记九 《Integers Comparator》