Typescript: Ta bort snittypen från huvudtypen
Jag är ny på Typescript och fast på det här problemet. Så, jag har en typ definierad som:
type MainType = Node & {
id: string;
name: string;
notifications: number
}
Jag vill ha en typ som inte innehåller Node-typ.
//Expected type
{
id: string;
name: string;
notifications: number
}
// I tried using Exclude, but it returns never
type SecondaryType = Exclude<MainType, Node>
//I tried using Omit, but that doesn't allow me to pass Node
type SecondaryType = Omit<MainType, Node>
Svar #1
Du behöver utelämna alla nycklar från Node-typen:
type SecondaryType = Omit<MainType, keyof Node>
Kolla denna lekplatslänk
Svar #2
För en mer generell lösning som fungerar i alla fall, kolla in detta knep:
type Untag<T, Tag> =
T extends infer T & Tag ? T : never;
type TestResult = Untag<string & { _tag: "foo" }, { _tag: "foo" }>; // => string
Detta görs möjligt av TypeScripts speciella stöd för inferens av intersection-typer i generiska typer, vilket tillåter funktioner som untag<T>(a: T & { tag: any }): T att fungera.
