类型 ' 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 解析为undefined
,confidence
会有什么值?
我想我会把它包装在一个 trycatch 块中,以避免这种情况。
但是作为derprisher's answer mentions, TypeScript runs at compile time,在try/catchs进入之前。
【参考方案1】:
您的函数的结果是label: string, confidence: string
或undefined
。哪一个在编译时是未知的。但是您不能将undefined
解构为label
和confidence
,并且打字稿想要确保类型安全。因此错误。
原则上解构如下:
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(() => (async () => 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<DownloadResult>
而从不返回 undefined
。因此解构总是可能的。以上是关于类型 ' label: string; 上不存在属性 'confidence'信心:字符串; |不明确的'的主要内容,如果未能解决你的问题,请参考以下文章
错误 TS2339:“字符串”类型上不存在属性“endsWith”