Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我发现自己在使用TypeScript时总是犯同样的错误。当我需要返回执行后已知的类型时,我该怎么做?_Javascript_Typescript - Fatal编程技术网

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';
}