gpt4 book ai didi

typescript - 采用任何类型及其子类型的函数

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:23 25 4
gpt4 key购买 nike

我想写下面的函数

function override<T, U>(first: T, second: U): T {
let result = <T>{};
for (let id in first) {
result[id] = first[id];
}
for (let id in second) {
result[id] = second[id];
}
return result;
}

但要使其类型安全。在我的用例中,TU 都是简单的记录类型。我希望要求 T 具有 U 的所有属性。有没有办法表达这种关系?

最佳答案

您不能在单个函数声明中。原因是extends泛型约束不能引用同组的其他泛型。但是,您可以将函数分成两部分(柯里化(Currying))。然后使用第一个参数的类型(现在在一个单独的函数中)来约束第二个参数的类型,如下所示:

var override = <T>(first:T) => <U extends T>(second:U) : T => {
let result = <T>{};
for (let id in first) {
result[id] = first[id];
}
for (let id in second) {
result[id] = second[id];
}
return result;
}

override({a:123})({a:123, b:456}); // okay
override({a:123})({b:456}); // error

关于typescript - 采用任何类型及其子类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32488309/

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