gpt4 book ai didi

javascript - 仅当存在另一个属性时才允许使用 Typescript 属性

转载 作者:行者123 更新时间:2023-12-04 13:55:42 24 4
gpt4 key购买 nike

假设我有一个函数,如果存在另一个属性,我只想允许一个属性。
我试图这样做,但它返回错误 Property 'c' does not exist on type 'A'.

type A = {
a?: string;
} & ({ b: string; c?: string } | { b?: string });

const sad = (props: A) => {
const { a, b } = props;

const { c } = props; // Property 'c' does not exist on type 'A'.

return { a, b };
};
有什么解决办法吗?

最佳答案

我知道的唯一方法是User defined Type Guard我喜欢将它与 Union Types 结合使用

interface CommonProps {
a?: string
b?: string
}

interface SimpleProps extends CommonProps {
kind: "simple"
}

interface ComplexProps extends CommonProps {
kind: "complex"
c?: string
}


type Props = SimpleProps | ComplexProps

function isComplex(arg: Props): arg is ComplexProps {
return arg && arg.kind === 'complex'
}

const sad = (props: Props): any => {
if (isComplex(props)) {
const {a, b, c} = props
// do something
// return something
}
const { a, b } = props
// do something
// return something
}
简而言之,我为每个可能的属性组合创建了一个接口(interface)。然后我将它们联合到 Props 下类型,在我的函数中我使用 user defined guards访问属性。

关于javascript - 仅当存在另一个属性时才允许使用 Typescript 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62955571/

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