{"id":4185,"date":"2022-08-21T21:59:04","date_gmt":"2022-08-21T16:29:04","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/"},"modified":"2022-08-21T21:59:04","modified_gmt":"2022-08-21T16:29:04","slug":"solved-how-to-access-a-constructor-parameter-inside-a-typescript-method","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/","title":{"rendered":"[Solved] How to access a constructor parameter inside a Typescript method"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-39869308\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"39869308\" data-parentid=\"39869070\" data-score=\"5\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p><em>&#8220;Just because my method cannot access a constructor parameter\u2026&#8221;<\/em> is thinking about this in the wrong terms. When instantiating your class, is <code>productDto<\/code> an important state of your instance? Does the data in <code>productDto<\/code> hold important information that <code>Product<\/code> needs during its lifetime? Then you&#8217;re not merely trying to pass it between your constructor and some method, but that data is part of your object&#8217;s state. And your object methods use and depend on that state. And object state is always implemented by object properties, so saving <code>productDto<\/code> on <code>this.productDto<\/code> is perfect fine and the right way to do it.<\/p>\n<blockquote>\n<p>But this doesn&#8217;t change the fact that the property is still accessible once the object has been initialized.<\/p>\n<\/blockquote>\n<p>So what? Using TypeScript and the <code>private<\/code> declaration, TypeScript will ensure that you&#8217;re not shooting your own foot by trying to access that property from outside code. That&#8217;s all you need. There&#8217;s no point in actually trying to enforce non-accessibility. You&#8217;re just going to bend over backwards for hardly any gain. Many Javascript objects have internal state which you can poke around in if you so wish. That&#8217;s no problem at all.<\/p>\n<p>It&#8217;s only a problem if you&#8217;re actually writing code against these internal properties which aren&#8217;t supposed to be part of the official API, and that internal implementation changes down the line. Simply don&#8217;t do that. Again, TypeScript&#8217;s <code>private<\/code> helps you enforce exactly that.<\/p>\n<pre><code>this.id = productDto.id;\nthis.productDto = productDto;\n<\/code><\/pre>\n<p>This is pretty redundant. Quite apparently you need <code>productDto.id<\/code> <em>and<\/em> <code>productDto<\/code> later on in other methods. Simply store the entire <code>productDto<\/code> as a property and access its <code>.id<\/code> as needed. If you need to expose the <code>id<\/code> as property on your class, using a <code>get<\/code> method which returns <code>this.prodctDto.id<\/code> is probably a sensible idea:<\/p>\n<pre><code>class Product {\n    private productDto: IProductDto;\n\n    constructor(productDto: IProductDto) {\n        this.productDto = productDto;\n    }\n\n    get id(): string {\n        return this.productDto.id;\n    }\n\n    getProductAttributeByName(name: string): ProductAttribute {\n        return this.productDto.productAttributes.filter(x =&gt; x.name === name)\n    }\n}\n<\/code><\/pre>\n<hr>\n<p>In general, try designing your classes <strong>without writing the constructor first<\/strong>. Write everything <em>but<\/em> the constructor. Design which internal and external properties your class needs and which properties your methods will get their data from. Then, as the very last step, write your constructor which needs to ensure that the object state is such that all your methods can work as designed. Then the thinking of &#8220;passing from constructor to method&#8221; obviates itself.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">6<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved How to access a constructor parameter inside a Typescript method <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] &#8220;Just because my method cannot access a constructor parameter\u2026&#8221; is thinking about this in the wrong terms. When instantiating your class, is productDto an important state of your instance? Does the data in productDto hold important information that Product needs during its lifetime? Then you&#8217;re not merely trying to pass it between your constructor &#8230; <a title=\"[Solved] How to access a constructor parameter inside a Typescript method\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/\" aria-label=\"More on [Solved] How to access a constructor parameter inside a Typescript method\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[333,651],"class_list":["post-4185","post","type-post","status-publish","format-standard","hentry","category-solved","tag-javascript","tag-typescript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[Solved] How to access a constructor parameter inside a Typescript method - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] How to access a constructor parameter inside a Typescript method - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] &#8220;Just because my method cannot access a constructor parameter\u2026&#8221; is thinking about this in the wrong terms. When instantiating your class, is productDto an important state of your instance? Does the data in productDto hold important information that Product needs during its lifetime? Then you&#8217;re not merely trying to pass it between your constructor ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-21T16:29:04+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] How to access a constructor parameter inside a Typescript method\",\"datePublished\":\"2022-08-21T16:29:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/\"},\"wordCount\":383,\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"keywords\":[\"javascript\",\"typescript\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/\",\"name\":\"[Solved] How to access a constructor parameter inside a Typescript method - JassWeb\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\"},\"datePublished\":\"2022-08-21T16:29:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] How to access a constructor parameter inside a Typescript method\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\\\/\\\/jassweb.com\"],\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/author\\\/jaspritsinghghumangmail-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] How to access a constructor parameter inside a Typescript method - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] How to access a constructor parameter inside a Typescript method - JassWeb","og_description":"[ad_1] &#8220;Just because my method cannot access a constructor parameter\u2026&#8221; is thinking about this in the wrong terms. When instantiating your class, is productDto an important state of your instance? Does the data in productDto hold important information that Product needs during its lifetime? Then you&#8217;re not merely trying to pass it between your constructor ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/","og_site_name":"JassWeb","article_published_time":"2022-08-21T16:29:04+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] How to access a constructor parameter inside a Typescript method","datePublished":"2022-08-21T16:29:04+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/"},"wordCount":383,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["javascript","typescript"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/","url":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/","name":"[Solved] How to access a constructor parameter inside a Typescript method - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-08-21T16:29:04+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-access-a-constructor-parameter-inside-a-typescript-method\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] How to access a constructor parameter inside a Typescript method"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/4185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=4185"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/4185\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=4185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=4185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=4185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}