gpt4 book ai didi

angularjs - 一种类型定义,无需联合即可涵盖原始类型和泛型类型的属性

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

这个模式要求我定义两种我想重构/合并的类型:

...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
};
return $q.all(promises);
})
.then((resolvedPromises: any) => {
// use
resolvedPromises.one...
resolvedPromises.two
});

我想定义 promises 的类型和 resolvedPromises但是因为它们是类型相关的,所以我想定义一个类型(可能是通用的)而不是定义两个具有相似定义的类型。

所以代替:

public interface ResultingType {
[id: string]: any,
one: Something1,
two: Something1
}

public interface PromisingType {
[id: string]: ng.IPromise<any>,
one: ng.IPromise<Something1>,
two: ng.IPromise<Something2>
}

问题是,从通常的泛型类型 Angular 来看,我们提供了要注入(inject)的最内层类型,但在我的例子中,我需要以某种方式定义外部输入 ng.IPromise<>或者什么都没有。

我也不想以一种允许两种类型的单一类型结束:

public interface ConsolidatedType {
[id: string]: any | ng.IPromise<any>,
one: Something1 | ng.IPromise<Something1>,
two: Something2 | ng.IPromise<Something2>
}

这将允许在无效的地方进行混合和匹配。所以那是不行的。有没有其他方法可以真正拥有单一类型而无需代码重复,只将类型包装到 promise 中?

最佳答案

怎么样:

interface BaseType<T, S> {
[id: string]: T;
one: S;
two: S;
}

然后:

...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
} as BaseType<ng.IPromise<any>, ng.IPromise<Something1>>;
return $q.all(promises);
})
.then((resolvedPromises: BaseType<any, Something1>) => {
// use
resolvedPromises.one...
resolvedPromises.two
});

您还可以创建“快捷方式”:

interface PromiseType extends BaseType<ng.IPromise<any>, ng.IPromise<Something1>> {}

interface ValueType extends BaseType<any, Something1> {}

然后:

...
.then((result1: any) => {
let promises = {
one: $q.when(val1),
two: $q.when(val2)
} as PromiseType;
return $q.all(promises);
})
.then((resolvedPromises: ValueType) => {
// use
resolvedPromises.one...
resolvedPromises.two
});

关于angularjs - 一种类型定义,无需联合即可涵盖原始类型和泛型类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325834/

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