Type narrowing doens't work as expected for objectHow 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
What would happen if the UK refused to take part in EU Parliamentary elections?
Is HostGator storing my password in plaintext?
Where in the Bible does the greeting ("Dominus Vobiscum") used at Mass come from?
Is there any reason not to eat food that's been dropped on the surface of the moon?
Why is delta-v is the most useful quantity for planning space travel?
Implement the Thanos sorting algorithm
Was the picture area of a CRT a parallelogram (instead of a true rectangle)?
Have I saved too much for retirement so far?
What is the oldest known work of fiction?
Tiptoe or tiphoof? Adjusting words to better fit fantasy races
The baby cries all morning
Why does John Bercow say “unlock” after reading out the results of a vote?
Lay out the Carpet
Why did Kant, Hegel, and Adorno leave some words and phrases in the Greek alphabet?
voltage of sounds of mp3files
Is it correct to write "is not focus on"?
How to be diplomatic in refusing to write code that breaches the privacy of our users
What is the intuitive meaning of having a linear relationship between the logs of two variables?
Can somebody explain Brexit in a few child-proof sentences?
Failed to fetch jessie backports repository
apt-get update is failing in debian
Was Spock the First Vulcan in Starfleet?
What is difference between behavior and behaviour
There is only s̶i̶x̶t̶y one place he can be
Type narrowing doens't work as expected for object
How 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
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
71.6k35068
71.6k35068
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