类型 ' label: string; 上不存在属性 'confidence'信心:字符串; |不明确的'

Posted

技术标签:

【中文标题】类型 \' label: string; 上不存在属性 \'confidence\'信心:字符串; |不明确的\'【英文标题】:Property 'confidence' does not exist on type ' label: string; confidence: string; | undefined'类型 ' label: string; 上不存在属性 'confidence'信心:字符串; |不明确的' 【发布时间】:2021-09-27 10:43:15 【问题描述】:

当我尝试解构以下函数的返回类型时:

const coreml = async (
  pathToImage: string,
): Promise<label: string; confidence: string | undefined> => 
  //body
;

这样:

const label, confidence = await coreml(/*path to image*/);

我明白了

'confidence' is assigned a value but never used.eslint@typescript-eslint/no-unused-vars
Property 'confidence' does not exist on type ' label: string; confidence: string;  | undefined'.

【问题讨论】:

如果 promise 解析为 undefinedconfidence 会有什么值? 我想我会把它包装在一个 trycatch 块中,以避免这种情况。 但是作为derprisher's answer mentions, TypeScript runs at compile time,在try/catchs进入之前。 【参考方案1】:

您的函数的结果是label: string, confidence: stringundefined。哪一个在编译时是未知的。但是您不能将undefined 解构为labelconfidence,并且打字稿想要确保类型安全。因此错误。

原则上解构如下:

const temp = await coreml();
//temp is now either "label": "foo", "confidence": "bar"  or undefined

//but the next statements will throw an error, if temp is undefined
const label = temp.label;
const confidence = temp.confidence;

Typescript 想要确保,这个错误不会在运行时发生。因此,编译时的错误

【讨论】:

这行得通吗? try const label, confidence = await coreml(routeParams.uri) catch (error)console.log(error) 不在 TypeScript 中,它是编译时,而不是运行时。 你确定这行不通吗?因为我相信我在 React 组件的 useEffect() 钩子中做了类似的事情。我在组件挂载时运行了一个自调用异步函数。我不知道你是否有 React 经验,但你会说这可能会让事情变得不同吗? React.useEffect(() =&gt; (async () =&gt; try const promise = await RNFS.downloadFile(/*this will return a Promise obj*/); console.log('promise', (await promise).statusCode); catch (error) console.log( error); )(); , []); RNFS.downloadfile 总是返回 jobId: number, promise: Promise&lt;DownloadResult&gt; 而从不返回 undefined。因此解构总是可能的。

以上是关于类型 ' label: string; 上不存在属性 'confidence'信心:字符串; |不明确的'的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2339:类型“Y”上不存在属性“x”

错误 TS2339:“字符串”类型上不存在属性“endsWith”

TS2339:联合类型上不存在属性 - 属性字符串 |不明确的

“文档”类型上不存在属性“密码”

打字稿 - HeadersInit 类型上不存在“授权”

“字符串”类型上不存在属性“replaceAll”