gpt4 book ai didi

javascript - 无法获得匹配的 typescript 类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:18 24 4
gpt4 key购买 nike

我无法使以下代码正常工作。

我正在尝试获取一些数据并处理所有虚假/错误情况,然后将清理后的数据传递给另一个函数。但是当我调用第二个函数时,输入似乎不匹配。

Type 'Error | number[]' is not assignable to type 'number[]'

interface SomeType {
a: number[] | null | Error
b: number[] | null
}

type Omit <T, K> = Pick<T, Exclude<keyof T, K>>
type ExcludeUnusableValues<T,K extends keyof T,C = Error | null>
= Omit<T, K> & {
[a in K]-? : Exclude<T[a], C>
}

function fetchData() {
const obj: SomeType = {
a: [1, 2, 3],
b: null
}
if (obj.a === null || obj.a instanceof Error) {
return null
}

// Type 'Error | number[]' is not assignable to type 'number[]'
useData(obj)
}

function useData(param1: ExcludeUnusableValues < SomeType, 'a' > ) {
console.log(param1)
}

TypeScript playground link

最佳答案

您可以通过将类型检查逻辑移至类型谓词中来解决此问题。这是您的示例,使用 isUsableType 修改:

interface SomeType {
a: number[] | null | Error
b: number[] | null
}

function isUsableType(obj: SomeType): obj is ExcludeUnusableValues < SomeType, 'a' > {
return obj.a!==null && !(obj.a instanceof Error)
}

type Omit <T, K> = Pick<T, Exclude<keyof T, K>>
type ExcludeUnusableValues<T,K extends keyof T,C = Error | null>
= Omit<T, K> & {
[a in K]-? : Exclude<T[a], C>
}

function fetchData() {
const obj: SomeType = {
a: [1, 2, 3],
b: null
}

if (isUsableType(obj)) {
useData(obj)
} else return null;

}

function useData(param1: ExcludeUnusableValues < SomeType, 'a' > ) {
console.log(param1)
}

关于javascript - 无法获得匹配的 typescript 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56433224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com