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;
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
add a comment |
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
add a comment |
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
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
typescript
asked Mar 8 at 9:38
chatoo2412chatoo2412
9815
9815
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Mar 8 at 9:48
Titian Cernicova-DragomirTitian Cernicova-Dragomir
73.4k35370
73.4k35370
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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