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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值