我试图创建一个类,它基于一个属性值具有不同的参数属性。一个非常简化的例子:
让我们假设我有一个名为Builder
的类,Builder
将根据传递给它的config的type
属性运行脚本或构建dockerfile。另外,根据type
属性,我希望config中的其他属性也能更改,因此当有人使用该类时,键入的内容会根据他们想要的type
更新。
type BuilderConfig = {
id: string;
type: "docker" | "script";
dockerfile: string; // I only want this when `type` === "docker"
script: string; // I only want this when `type` === "script"
}
class Builder {
constructor(private config: BuilderConfig) {}
}
new Builder({
id: "test",
type: "docker",
dockerfile: "./Dockerfile", // `dockerfile` is required but `script` does not appear as an option in intellisense
});
new Builder({
id: "test",
type: "script",
script: "ls -la", // `script` is required but `dockerfile` does not appear as an option in intellisense
});
有人知道如何实现这一点吗?我的假设是使用泛型,但最终我认为我很难理解它。
1条答案
按热度按时间2uluyalo1#
您可以使用区分联合来获取所需的错误:
Playground链接
您也可以将区分并集与交集类型混合使用,以避免重复公共属性。