How can I get specific type in `or` operator definition?











up vote
0
down vote

favorite












For example I have type like this blow:



type ActionResource = {
type: "QUERY";
payload: IListPayload;
} | {
type: "GET";
payload: {
id: string;
};
} | {
type: "QUERY_NEXT";
} | {
type: "SAVE";
payload: {
id: string;
data: any;
};
} | {
type: "SEARCH_TEXT";
payload: {
...;
};
}


Now I would like to get specific type which has type properties = 'SAVE'
So I do like this



type GetActionResourceType<K extends ActionResource['type']> = ActionResource
type SaveType = GetActionResourceType<'SAVE'>


I hope it will return type of SaveType look like:



{
type: "SAVE";
payload: {
id: string;
data: any;
}


How can I make GetActionResourceType in my purpose










share|improve this question


























    up vote
    0
    down vote

    favorite












    For example I have type like this blow:



    type ActionResource = {
    type: "QUERY";
    payload: IListPayload;
    } | {
    type: "GET";
    payload: {
    id: string;
    };
    } | {
    type: "QUERY_NEXT";
    } | {
    type: "SAVE";
    payload: {
    id: string;
    data: any;
    };
    } | {
    type: "SEARCH_TEXT";
    payload: {
    ...;
    };
    }


    Now I would like to get specific type which has type properties = 'SAVE'
    So I do like this



    type GetActionResourceType<K extends ActionResource['type']> = ActionResource
    type SaveType = GetActionResourceType<'SAVE'>


    I hope it will return type of SaveType look like:



    {
    type: "SAVE";
    payload: {
    id: string;
    data: any;
    }


    How can I make GetActionResourceType in my purpose










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      For example I have type like this blow:



      type ActionResource = {
      type: "QUERY";
      payload: IListPayload;
      } | {
      type: "GET";
      payload: {
      id: string;
      };
      } | {
      type: "QUERY_NEXT";
      } | {
      type: "SAVE";
      payload: {
      id: string;
      data: any;
      };
      } | {
      type: "SEARCH_TEXT";
      payload: {
      ...;
      };
      }


      Now I would like to get specific type which has type properties = 'SAVE'
      So I do like this



      type GetActionResourceType<K extends ActionResource['type']> = ActionResource
      type SaveType = GetActionResourceType<'SAVE'>


      I hope it will return type of SaveType look like:



      {
      type: "SAVE";
      payload: {
      id: string;
      data: any;
      }


      How can I make GetActionResourceType in my purpose










      share|improve this question













      For example I have type like this blow:



      type ActionResource = {
      type: "QUERY";
      payload: IListPayload;
      } | {
      type: "GET";
      payload: {
      id: string;
      };
      } | {
      type: "QUERY_NEXT";
      } | {
      type: "SAVE";
      payload: {
      id: string;
      data: any;
      };
      } | {
      type: "SEARCH_TEXT";
      payload: {
      ...;
      };
      }


      Now I would like to get specific type which has type properties = 'SAVE'
      So I do like this



      type GetActionResourceType<K extends ActionResource['type']> = ActionResource
      type SaveType = GetActionResourceType<'SAVE'>


      I hope it will return type of SaveType look like:



      {
      type: "SAVE";
      payload: {
      id: string;
      data: any;
      }


      How can I make GetActionResourceType in my purpose







      typescript functional-programming






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 5 at 3:48









      Le Tom

      629




      629
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          You can just use the Extract (see in docs at Predefined conditional types)conditional type to extract a type that extends a specific type:



          type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>





          share|improve this answer























          • Thanks, you are right. Where you know Extract type?
            – Le Tom
            Nov 5 at 7:32






          • 1




            @LeTom added link to docs ..
            – Titian Cernicova-Dragomir
            Nov 5 at 7:34










          • @LeTom please mark as answered if it was what you were looking for
            – Titian Cernicova-Dragomir
            Nov 7 at 10:57











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53148055%2fhow-can-i-get-specific-type-in-or-operator-definition%23new-answer', 'question_page');
          }
          );

          Post as a guest
































          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote



          accepted










          You can just use the Extract (see in docs at Predefined conditional types)conditional type to extract a type that extends a specific type:



          type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>





          share|improve this answer























          • Thanks, you are right. Where you know Extract type?
            – Le Tom
            Nov 5 at 7:32






          • 1




            @LeTom added link to docs ..
            – Titian Cernicova-Dragomir
            Nov 5 at 7:34










          • @LeTom please mark as answered if it was what you were looking for
            – Titian Cernicova-Dragomir
            Nov 7 at 10:57















          up vote
          1
          down vote



          accepted










          You can just use the Extract (see in docs at Predefined conditional types)conditional type to extract a type that extends a specific type:



          type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>





          share|improve this answer























          • Thanks, you are right. Where you know Extract type?
            – Le Tom
            Nov 5 at 7:32






          • 1




            @LeTom added link to docs ..
            – Titian Cernicova-Dragomir
            Nov 5 at 7:34










          • @LeTom please mark as answered if it was what you were looking for
            – Titian Cernicova-Dragomir
            Nov 7 at 10:57













          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          You can just use the Extract (see in docs at Predefined conditional types)conditional type to extract a type that extends a specific type:



          type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>





          share|improve this answer














          You can just use the Extract (see in docs at Predefined conditional types)conditional type to extract a type that extends a specific type:



          type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 5 at 7:34

























          answered Nov 5 at 5:07









          Titian Cernicova-Dragomir

          50.4k33148




          50.4k33148












          • Thanks, you are right. Where you know Extract type?
            – Le Tom
            Nov 5 at 7:32






          • 1




            @LeTom added link to docs ..
            – Titian Cernicova-Dragomir
            Nov 5 at 7:34










          • @LeTom please mark as answered if it was what you were looking for
            – Titian Cernicova-Dragomir
            Nov 7 at 10:57


















          • Thanks, you are right. Where you know Extract type?
            – Le Tom
            Nov 5 at 7:32






          • 1




            @LeTom added link to docs ..
            – Titian Cernicova-Dragomir
            Nov 5 at 7:34










          • @LeTom please mark as answered if it was what you were looking for
            – Titian Cernicova-Dragomir
            Nov 7 at 10:57
















          Thanks, you are right. Where you know Extract type?
          – Le Tom
          Nov 5 at 7:32




          Thanks, you are right. Where you know Extract type?
          – Le Tom
          Nov 5 at 7:32




          1




          1




          @LeTom added link to docs ..
          – Titian Cernicova-Dragomir
          Nov 5 at 7:34




          @LeTom added link to docs ..
          – Titian Cernicova-Dragomir
          Nov 5 at 7:34












          @LeTom please mark as answered if it was what you were looking for
          – Titian Cernicova-Dragomir
          Nov 7 at 10:57




          @LeTom please mark as answered if it was what you were looking for
          – Titian Cernicova-Dragomir
          Nov 7 at 10:57


















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53148055%2fhow-can-i-get-specific-type-in-or-operator-definition%23new-answer', 'question_page');
          }
          );

          Post as a guest




















































































          這個網誌中的熱門文章

          Xamarin.form Move up view when keyboard appear

          Post-Redirect-Get with Spring WebFlux and Thymeleaf

          Anylogic : not able to use stopDelay()