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

                    1928 у кіно

                    Захаров Федір Захарович

                    Ель Греко