我想输入一个函数,它接受一个字符串作为输入,如果字符串包含'[]',则返回一个列表,否则返回一个对象。类似的东西:
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)。
你能帮我解决这个问题吗?
答案 0 :(得分:0)
你只能用类型参数来做到这一点,而不是真正的函数参数:
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'>();