我正在尝试将函数的布尔结果分配给泛型类型。 有可能吗?我有以下架构:
interface FormalWebFieldProps {
name: string
id: string
onChange: (e: FormalTextFieldEvent) => void
}
interface FormalNativeFieldProps {
onChangeText: (text: string) => void
}
type FormalFieldProps<IsNative> = {
disabled: boolean
value: any
error?: string
} & (IsNative extends true ? FormalNativeFieldProps : FormalWebFieldProps)
如果我只是将<true>
或<false>
传递给通用类型FormalFieldProps
,它将起作用:
const getWebFieldProps = (): FormalFieldProps<false> => {
return {
id: 'field id',
name: 'field name',
disabled: false,
value: 'foo',
error: 'error',
onChange: e => console.log(e.target.value)
}
}
const getNativeFieldProps = (): FormalFieldProps<true> => {
return {
disabled: false,
value: 'foo',
error: 'error',
onChangeText: text => console.log(text)
}
}
但是,由于此验证是动态的并且在运行时进行,因此我不知道是否可以将该函数的返回值分配给通用类型,如下所示:
const isNative = () => false
const getDynamicFieldProps = (): FormalFieldProps<bool = isNative()> => {
const extra = !isNative() ? {
id: 'field id',
name: 'field name',
onChange: e => console.log(e.target.value)
} : {
onChangeText: text => console.log(text)
}
return {
disabled: false,
value: 'foo',
error: 'error',
...extra
}
}
答案 0 :(得分:0)
尝试将您的标志声明为正常声明,例如 isNegative = false;
并在三元运算符的帮助下,您可以执行代码块
喜欢
isNegative? {
id: 'field id',
name: 'field name',
disabled: false,
value: 'foo',
error: 'error',
onChange: e => console.log(e.target.value)
}: {
disabled: false,
value: 'foo',
error: 'error',
onChangeText: text => console.log(text)
}
这不是完美的代码,但是您会有所了解。