Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface WithNumber {
- foo: number;
- }
- interface WithString {
- bar: string;
- }
- type MyType = WithNumber | WithString;
- interface Container<T extends MyType = MyType> {
- content: {
- value: T
- }
- }
- interface WithNumberContainer extends Container<WithNumber> { };
- interface WithStringContainer extends Container<WithString> { };
- type MysteryContainer = WithNumberContainer | WithStringContainer;
- interface ParameterWithContainer<C extends MysteryContainer = MysteryContainer> {
- container: C
- }
- function isParameterWithNumberContainer(arg: ParameterWithContainer<MysteryContainer>): arg is ParameterWithContainer<WithNumberContainer> {
- return typeof (arg.container.content.value as WithNumber).foo === "number";
- }
- function test(arg: ParameterWithContainer<WithNumberContainer | WithStringContainer>) {
- if (isParameterWithNumberContainer(arg)) {
- arg.container.content.value.foo;
- return;
- }
- /*
- * Error:
- * Property 'bar' does not exist on type 'MyType'.
- * Property 'bar' does not exist on type 'WithNumber'.
- */
- arg.container.content.value.bar;
- }
Add Comment
Please, Sign In to add comment