让 TS 类型 "cat" | string 支持补全提示

问题描述

考察以下 TS 类型。

Copy
type Animal = "cat" | "dog" | string;

正常情况下，我们可能会按上面的方式来写，但是这在 vscode 上得不到良好的补全提示。

Copy
const animal: Animal = ''; // 输入引号后没有补全提示

解决方案

为了解决这个问题可以采取以下两种方式来实现。

Copy
// 方案一 使用 `string & {}` 替代 `stirng`
type Animal = "cat" | "dog" | (string & {});

// 方案二 使用 Omit 手动从 `string` 中排除类型
type Animal = "cat" | "dog" | Omit<string, "cat" | "dog">

const animal: Animal = ''; // 输入引号后可以看到正确的补全提示

结果

之前（没有补全提示）

之后（完善的补全提示）