gpt4 book ai didi

TypeScript:将一个界面转换为另一个界面

转载 作者:行者123 更新时间:2023-12-05 03:00:20 26 4
gpt4 key购买 nike

假设我有两个接口(interface):

interface A {
foo: boolean,
bar: string,
baz: string
}

interface B {
foo: number,
bar: string,
baz: string
}

现在我有一个实现接口(interface) A 的对象,但我需要将它传递给需要接口(interface) B 的函数。我当然可以:

const another_object: B = {
foo: original_object.foo? 1 : 0,
bar: original_object.bar,
baz: original_object.baz
}

但是如果 A 和 B 包含很多字段,这种表示法会很不方便。在 TypeScript 中有没有更好的方法来做到这一点?

最佳答案

您可以使用扩展运算符来简化此操作:

const another_object: B = {
...original_object,
foo: orignial_object.foo? 0: 1
}

TypeScript 有一种方法可以让这更容易。准备就绪后,我会更新此答案。

更新:上面的答案就足够了。我想到的是一个更受限制的用例,即覆盖具有不兼容类型的属性,同时保留其余类型。

如果这正是您要查找的内容,您可以查看 type-plus 中的 typeOverrideIncompatible() 函数.

类型有点复杂。主要逻辑如下:

export type ANotB<A extends object, B extends object> =
IsSame<A, B> extends true ? never :
IsDisjoint<A, B> extends true ? A :
{
[k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k]
}

ANotB 来自集合论,意思是 A 中的属性,B 中的属性。

关于TypeScript:将一个界面转换为另一个界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56924941/

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