Typescript 如何在接口(如函数)中推断泛型值
Typescript有一个很好的特性,当给定类型时Typescript 如何在接口(如函数)中推断泛型值,typescript,typescript-generics,Typescript,Typescript Generics,Typescript有一个很好的特性,当给定类型时 type Foo = "foo" type Bar = "bar" type FooBar = Foo | Bar; type IfFooThenBar<T extends FooBar> = T extends Foo ? Bar : T extends Bar ? Foo : never; Typescript没有对变量的部分推断,您需要使用函数来推断接口的类型参数 要做到这一点,最短的方法就是生活: type Foo =
type Foo = "foo"
type Bar = "bar"
type FooBar = Foo | Bar;
type IfFooThenBar<T extends FooBar> = T extends Foo ? Bar :
T extends Bar ? Foo : never;
Typescript没有对变量的部分推断,您需要使用函数来推断接口的类型参数 要做到这一点,最短的方法就是生活:
type Foo = "foo"
type Bar = "bar"
type FooBar = Foo | Bar;
type IfFooThenBar<T extends FooBar> = T extends Foo ? Bar :
T extends Bar ? Foo : never;
interface IIfFooThenBar<T extends FooBar> {
fooOrBar: T
barOrFoo: IfFooThenBar<T>
}
const a = (<T extends FooBar>(o: IIfFooThenBar<T>) => o)({
fooOrBar: "foo",
barOrFoo: "foo" // err
})
interface IIfFooThenBar<T extends FooBar> {
fooOrBar: T
barOrFoo: IfFooThenBar<T>
}
const a: IIfFooThenBar = {
fooOrBar: "foo",
barOrFoo: "foo" // this should result in an error
}
type Foo = "foo"
type Bar = "bar"
type FooBar = Foo | Bar;
type IfFooThenBar<T extends FooBar> = T extends Foo ? Bar :
T extends Bar ? Foo : never;
interface IIfFooThenBar<T extends FooBar> {
fooOrBar: T
barOrFoo: IfFooThenBar<T>
}
const a = (<T extends FooBar>(o: IIfFooThenBar<T>) => o)({
fooOrBar: "foo",
barOrFoo: "foo" // err
})