如何使用Typescript基于值创建动态类型
我正在构建一个React组件,该组件将根据用户传递的属性使用不同的HTML标记。下面是一个例子:如何使用Typescript基于值创建动态类型,typescript,Typescript,我正在构建一个React组件,该组件将根据用户传递的属性使用不同的HTML标记。下面是一个例子: 接口公共{ 普通?:数字; } 接口A扩展了公共{ 第一:字符串; 第二:字符串; 检查:正确; } 接口B扩展了公共{ 第三:字符串; 第四:字符串; 检查?:假; } 型式试验=A | B; 为了测试这一点,我期待以下内容: //成功 让测试:测试={ 共同点:1, 检查:正确, 第一:“文本” } //成功 让测试:测试={ 共同点:1, 检查:错误, 第三:“文本” } //失败 让测试:
接口公共{
普通?:数字;
}
接口A扩展了公共{
第一:字符串;
第二:字符串;
检查:正确;
}
接口B扩展了公共{
第三:字符串;
第四:字符串;
检查?:假;
}
型式试验=A | B;
为了测试这一点,我期待以下内容:
//成功
让测试:测试={
共同点:1,
检查:正确,
第一:“文本”
}
//成功
让测试:测试={
共同点:1,
检查:错误,
第三:“文本”
}
//失败
让测试:测试={
共同点:1,
检查:正确,
第三:“文本”
}
//失败
让测试:测试={
共同点:1,
检查:错误,
第一:“文本”
}
所有这些都在起作用,挑战是在根本不传递值进行检查的情况下获得类型B,如:
let测试:测试={
共同点:1,
第一个:“text”//应该突出显示一个错误,因为没有传递'check'
第三:“文本”,
}
以下是我尝试过的:
//尝试1:包含可能的值
接口B扩展了公共{
第三:字符串;
第四:字符串;
检查?:false | null | undefined | never | unknown | void;//都试过了
}
//尝试2:根本不包括。还是不行
接口B扩展了公共{
第三:字符串;
第四:字符串;
}
因为检查在两个接口之间很常见。为什么不呢
interface Common {
common?: number;
check?: boolean;
}
interface A extends Common {
first?: string;
second?: string;
}
interface B extends Common {
third?: string;
fourth?: string;
}
type Test = A | B;
相反?这是因为
A | B
包含或,但您需要。您可以使用。为什么会出错<代码>测试obj符合B接口。您可以执行:check:false、
来区分这两个接口。@r3dst0rm无论何时将true
或false
传递到检查
,它都会工作。但我面临的问题是,当我甚至没有传递check
的值时,我想推断它是类型B。我尝试了以下方法:check:false | undefined
,因为值未传递,所以它是未定义的。但是它不起作用如果你把支票从B中全部删除怎么办?区分这两个的方法是看支票是否存在?它在A
中是必需的,而在B
中不是。您有效地删除了检查
。他所有的测试用例都不工作了。