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;
и функции
function ifFooThenBar<T extends FooBar>(fooOrBar: T, barOrFoo: IfFooThenBar<T>): void
он выводит T
из списка параметров функций и применяет его к IfFooThenBar<T>
и сужает потенциальных кандидатов на параметр, так что ifFooThenBar("foo", "foo")
не будет компилироваться.
Есть ли подобный режим для интерфейсов, где это работает:
interface IIfFooThenBar<T extends FooBar> {
fooOrBar: T
barOrFoo: IfFooThenBar<T>
}
const a: IIfFooThenBar = {
fooOrBar: "foo",
barOrFoo: "foo" // this should result in an error
}