Javascript 我发现自己在使用TypeScript时总是犯同样的错误。当我需要返回执行后已知的类型时,我该怎么做?
例如:这会抛出一个错误Javascript 我发现自己在使用TypeScript时总是犯同样的错误。当我需要返回执行后已知的类型时,我该怎么做?,javascript,typescript,Javascript,Typescript,例如:这会抛出一个错误 export const toArray = <T>(potentialArr: T): [T] => kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr]; 但我知道这将始终返回一个数组,我做错了什么? TypeScript忽略我告诉它将返回一个数组这一事实是毫无意义的 无论我如何逻辑地撰写这篇文章,我似乎无法解释打字的原因 export const toArray =
export const toArray = <T>(potentialArr: T): [T] =>
kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr];
但我知道这将始终返回一个数组,我做错了什么?
TypeScript忽略我告诉它将返回一个数组这一事实是毫无意义的
无论我如何逻辑地撰写这篇文章,我似乎无法解释打字的原因
export const toArray = <T>(potentialArr: T | [T]): T | [T] =>
kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr];
如果我这样做:
export const toArray = <T>(potentialArr: T): T | [T] =>
kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr];
export const to阵列=(潜在阵列:T):T |[T]=>
kindOf(potentialArr)=='array'?电位arr:[电位arr];
它可以正常工作,但从该函数派生的每个值都被类型化为
x |[x]
这不是真的,因为从这个函数派生的每个值总是[x]
与此相同:
export const toArray = <T>(potentialArr: T) =>
kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr];
export const to阵列=(潜在阵列:T)=>
kindOf(potentialArr)=='array'?电位arr:[电位arr];
这是一个为我构建的没有错误的解决方案:
function foo<T>(input: [T] | T): [T] {
return Array.isArray(input) ? input : [input];
}
但是你实际上只是在实现内置的
数组。isArray
,这是更正确的方法。有什么错误?@Evert更新了,我的bad什么是kindOf
?@Evert kindOf类似于tyoeof,但更准确地说,我的问题是我正在使用的库。这是lib的typedefs的问题吗?我不确定用这种方式用typescript是否能正确实现kindof
。。一般来说,我也建议避免使用这些微库。一点复制粘贴比一点依赖项要好(imho=)Typescript可以用“断言函数”和“类型卫士”进行此类类型的断言,但这些工具中的每一个都只能给出是/否答案,而不能给出更广泛的答案,例如“此函数可以判断变量是数组、字符串或对象等”`
export const toArray = <T>(potentialArr: T) =>
kindOf(potentialArr) === 'array' ? potentialArr : [potentialArr];
function foo<T>(input: [T] | T): [T] {
return Array.isArray(input) ? input : [input];
}
function isArray(input: any): input is any[] {
return kindOf(input) === 'array';
}