gpt4 book ai didi

类型的 TypeScript 联合被解析为类型的交集

转载 作者:行者123 更新时间:2023-12-02 14:48:39 25 4
gpt4 key购买 nike

我有这个片段

class J {
constructor(public foo: number) {}
}

class B {
constructor(public bar: string) {}
}

interface Cache {
json?: J;
binary?: B;
}

function test(key: "json" | "binary", data: J | B, obj: Cache) {
obj[key] = data;
}

如果您在 https://www.typescriptlang.org/play/ 中尝试此代码, obj[key] = data; 行有以下错误

Type 'J | B' is not assignable to type 'J & B'. Type 'J' is not assignable to type 'J & B'. Property 'bar' is missing in type 'J' but required in type 'B'.

显然我缺少某些东西,但我无法弄清楚是什么。有什么想法吗?

最佳答案

keydata之间没有关系,所以你可以用test( "json", new B())调用测试并且分配无效。

如果您使用通用类型参数(我们称它为 K)作为键并将 data 键入为 Cache[K], typescript 将允许分配。 (尽管它仍然不是 100% 类型安全的,因为 K 可能是一个联合并且可能会发生与上述相同的问题):

class J {
constructor(public foo: number) {}
}

class B {
constructor(public bar: string) {}
}

interface Cache {
json?: J;
binary?: B;
}

function test<K extends keyof Cache>(key: K, data: Cache[K], obj: Cache) {
obj[key] = data;
}

Play

关于类型的 TypeScript 联合被解析为类型的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389826/

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