问题描述#
考察以下 TS 类型。
type Animal = "cat" | "dog" | string;
正常情况下,我们可能会按上面的方式来写,但是这在 vscode 上得不到良好的补全提示。
const animal: Animal = ''; // 输入引号后没有补全提示
解决方案#
为了解决这个问题可以采取以下两种方式来实现。
// 方案一 使用 `string & {}` 替代 `stirng`
type Animal = "cat" | "dog" | (string & {});
// 方案二 使用 Omit 手动从 `string` 中排除类型
type Animal = "cat" | "dog" | Omit<string, "cat" | "dog">
const animal: Animal = ''; // 输入引号后可以看到正确的补全提示
结果#
之前(没有补全提示)#
之后(完善的补全提示)#