首页 > 解决方案 > 字符串上的打字稿条件类型包括

问题描述

我想键入一个函数,该函数将字符串作为输入,如果字符串包含“[]”则返回一个列表,否则返回一个对象。像这样的东西:

function func<T = any>(query: string): typeof query extends `${any}[]${any}` ? Array<T> : T {
  if (query.includes('[]')) {
    return [] as T[]
  }
  return {} as T
}

除非它不起作用,函数返回类型只是字符串。

我正在使用最新的打字稿版本(4.3.2)。

你能帮我吗?

标签: typescripttypescript-typingstemplate-literals

解决方案


您只能使用类型参数而不是真正的函数参数来做到这一点:

function func<S extends string, T = any>(): S extends `${infer A}[]${infer B}` ? Array<T> : T {

}
const testFun = func<'a[]b'>();
const testFun2 = func<'ab'>();

推荐阅读