Type narrowing doens't work as expected for object The 2019 Stack Overflow Developer Survey Results Are InHow to tell TypeScript that optional property in object exists and is set?Type definition in object literal in TypeScriptAre strongly-typed functions as parameters possible in TypeScript?Typescript: Interfaces vs TypesTypeScript. How to use not exported type definitions?Typescript check if property in object in typesafe wayWhy doesn't typescript undefined type behave same as optional?TypeScript Inline static type guardType for non-falsy, aka truthykeyof interface without generic index signaturesHow can I check that a string is a property a particular interface in TypeScript

Resizing object distorts it (Illustrator CC 2018)

Why isn't the circumferential light around the M87 black hole's event horizon symmetric?

Did Section 31 appear in Star Trek: The Next Generation?

Is this app Icon Browser Safe/Legit?

Why do UK politicians seemingly ignore opinion polls on Brexit?

Earliest use of the term "Galois extension"?

Delete all lines which don't have n characters before delimiter

What is the accessibility of a package's `Private` context variables?

What does Linus Torvalds mean when he says that Git "never ever" tracks a file?

Can someone be penalized for an "unlawful" act if no penalty is specified?

Deal with toxic manager when you can't quit

When should I buy a clipper card after flying to OAK?

Have you ever entered Singapore using a different passport or name?

What did it mean to "align" a radio?

Can we generate random numbers using irrational numbers like π and e?

Can a rogue use sneak attack with weapons that have the thrown property even if they are not thrown?

Where to refill my bottle in India?

Should I use my personal e-mail address, or my workplace one, when registering to external websites for work purposes?

Output the Arecibo Message

What is the most effective way of iterating a std::vector and why?

Is "plugging out" electronic devices an American expression?

What could be the right powersource for 15 seconds lifespan disposable giant chainsaw?

Is an up-to-date browser secure on an out-of-date OS?

Time travel alters history but people keep saying nothing's changed



Type narrowing doens't work as expected for object



The 2019 Stack Overflow Developer Survey Results Are InHow to tell TypeScript that optional property in object exists and is set?Type definition in object literal in TypeScriptAre strongly-typed functions as parameters possible in TypeScript?Typescript: Interfaces vs TypesTypeScript. How to use not exported type definitions?Typescript check if property in object in typesafe wayWhy doesn't typescript undefined type behave same as optional?TypeScript Inline static type guardType for non-falsy, aka truthykeyof interface without generic index signaturesHow can I check that a string is a property a particular interface in TypeScript



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















interface Obj 
foo?: string;
bar?: string;


const fn = (obj: Obj, key: keyof Obj) =>
if (obj.foo)
const val1 = obj.foo; // string


if (obj['foo'])
const val2 = obj['foo'] // string


const picked = obj[key];

if (picked)
const val3 = picked; // string


if (obj[key])
const val4 = obj[key]; // string
;


I wonder why type narrowing doesn't work in case of val4.



I know I can use ! or custom defined type guards answered here. But what I want to know is the reason.










share|improve this question




























    0















    interface Obj 
    foo?: string;
    bar?: string;


    const fn = (obj: Obj, key: keyof Obj) =>
    if (obj.foo)
    const val1 = obj.foo; // string


    if (obj['foo'])
    const val2 = obj['foo'] // string


    const picked = obj[key];

    if (picked)
    const val3 = picked; // string


    if (obj[key])
    const val4 = obj[key]; // string
    ;


    I wonder why type narrowing doesn't work in case of val4.



    I know I can use ! or custom defined type guards answered here. But what I want to know is the reason.










    share|improve this question
























      0












      0








      0








      interface Obj 
      foo?: string;
      bar?: string;


      const fn = (obj: Obj, key: keyof Obj) =>
      if (obj.foo)
      const val1 = obj.foo; // string


      if (obj['foo'])
      const val2 = obj['foo'] // string


      const picked = obj[key];

      if (picked)
      const val3 = picked; // string


      if (obj[key])
      const val4 = obj[key]; // string
      ;


      I wonder why type narrowing doesn't work in case of val4.



      I know I can use ! or custom defined type guards answered here. But what I want to know is the reason.










      share|improve this question














      interface Obj 
      foo?: string;
      bar?: string;


      const fn = (obj: Obj, key: keyof Obj) =>
      if (obj.foo)
      const val1 = obj.foo; // string


      if (obj['foo'])
      const val2 = obj['foo'] // string


      const picked = obj[key];

      if (picked)
      const val3 = picked; // string


      if (obj[key])
      const val4 = obj[key]; // string
      ;


      I wonder why type narrowing doesn't work in case of val4.



      I know I can use ! or custom defined type guards answered here. But what I want to know is the reason.







      typescript






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 8 at 9:38









      chatoo2412chatoo2412

      9815




      9815






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Narowing does not work on dynamic access to the object (access with [] and a variable as the index). This limitation is due to performance reasons. You can search GitHub for issues around this, here is one.






          share|improve this answer























            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',
            autoActivateHeartbeat: false,
            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%2f55060414%2ftype-narrowing-doenst-work-as-expected-for-object%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Narowing does not work on dynamic access to the object (access with [] and a variable as the index). This limitation is due to performance reasons. You can search GitHub for issues around this, here is one.






            share|improve this answer



























              0














              Narowing does not work on dynamic access to the object (access with [] and a variable as the index). This limitation is due to performance reasons. You can search GitHub for issues around this, here is one.






              share|improve this answer

























                0












                0








                0







                Narowing does not work on dynamic access to the object (access with [] and a variable as the index). This limitation is due to performance reasons. You can search GitHub for issues around this, here is one.






                share|improve this answer













                Narowing does not work on dynamic access to the object (access with [] and a variable as the index). This limitation is due to performance reasons. You can search GitHub for issues around this, here is one.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 8 at 9:48









                Titian Cernicova-DragomirTitian Cernicova-Dragomir

                73.4k35370




                73.4k35370





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55060414%2ftype-narrowing-doenst-work-as-expected-for-object%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Save data to MySQL database using ExtJS and PHP [closed]2019 Community Moderator ElectionHow can I prevent SQL injection in PHP?Which MySQL data type to use for storing boolean valuesPHP: Delete an element from an arrayHow do I connect to a MySQL Database in Python?Should I use the datetime or timestamp data type in MySQL?How to get a list of MySQL user accountsHow Do You Parse and Process HTML/XML in PHP?Reference — What does this symbol mean in PHP?How does PHP 'foreach' actually work?Why shouldn't I use mysql_* functions in PHP?

                    Compiling GNU Global with universal-ctags support Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!Tags for Emacs: Relationship between etags, ebrowse, cscope, GNU Global and exuberant ctagsVim and Ctags tips and trickscscope or ctags why choose one over the other?scons and ctagsctags cannot open option file “.ctags”Adding tag scopes in universal-ctagsShould I use Universal-ctags?Universal ctags on WindowsHow do I install GNU Global with universal ctags support using Homebrew?Universal ctags with emacsHow to highlight ctags generated by Universal Ctags in Vim?

                    Add ONERROR event to image from jsp tldHow to add an image to a JPanel?Saving image from PHP URLHTML img scalingCheck if an image is loaded (no errors) with jQueryHow to force an <img> to take up width, even if the image is not loadedHow do I populate hidden form field with a value set in Spring ControllerStyling Raw elements Generated from JSP tagds with Jquery MobileLimit resizing of images with explicitly set width and height attributeserror TLD use in a jsp fileJsp tld files cannot be resolved