具有工作自动完成功能的“keyof”和“string”的联合类型

Phi*_*tor 2 typescript typescript-typings union-types

我想公开一个方法,该方法采用一些 Union 类型作为参数,并为此提供自动完成功能。由于此联合类型可以通过声明合并进行扩展,因此自动完成是这里的一个关键功能。

但是,如果用户在使用我的库时不使用 TypeScript,或者不想在声明中添加特定类型,则它应该接受string联合类型的替代类型。

简而言之:我想要联合类型的自动补全,但也允许任何不匹配的字符串。

仅包含联合类型的示例:

export interface Values {
   'variant-a': undefined,
   'variant-b': undefined,
   'variant-c': undefined,
}

function doAThing<T extends keyof Values>(name: T): void {
  console.log(name);
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  1. 添加函数重载: function doAThing<T extends keyof Values>(name: string): void;- 将类型与 , 合并keyof Values,然后两者都变成字符串。没有自动完成功能。
  2. string使用: <T extends keyof Values | string>- 合并到 only使泛型类型成为并集string。也没有自动完成功能。

md2*_*rpe 7

在这里找到了一个解决方案:

export type Values = {
   'variant-a': undefined,
   'variant-b': undefined,
   'variant-c': undefined,
}

type AnyString<T> = T | (string & {});

function doAThing<T extends keyof Values>(name: AnyString<T>): void {
  console.log(name);
}

doAThing('variant-b');  // Autocompleted
doAThing('variant-d');  // Not autocompleted, but still accepted
Run Code Online (Sandbox Code Playgroud)