Bài viết phổ biến của tác giả
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了以下变量的情况:
var foo: Foo | Foo | Foo;
动态生成(使用 keyof 和 stuff),这在代码的那个点是完全有意的。但是,我需要调用像这样定义的对象内部的方法:
class Foo {
pipe(): Foo;
pipe(obj: Operator, obj2: Operator): Foo;
pipe(obj: Operator): Foo;
pipe(...obj: Operator[]): Foo {
return new Foo();
}
}
问题是,当我执行以下操作时:
const f = foo.pipe((bar) => new Foo());
thanh
被推断为 sợi dây
虽然我期待 string | number | boolean
.
我的猜测是我需要转换 Foo
Đi vàoFoo
它解决了问题。
我怎样才能做这样的转换?
câu trả lời hay nhất
您可以使用条件类型来实现此目的(联合类型分布在联合上,这在这种情况下对我们有帮助)
type UnionOfFooToFooOfUnion > = Foo< T extends Foo ? U : never>
let foo!: Foo | Foo | Foo;
let merged: UnionOfFooToFooOfUnion = foo // we can just assign it
或者我们可以使用一个函数:
function mergeFoo>(foo: T): UnionOfFooToFooOfUnion {
return foo;
}
mergeFoo(foo).pipe(s=> console.log(s)) // s is number | string | boolean
Tôi là một lập trình viên xuất sắc, rất giỏi!