{"id":7059,"date":"2019-05-13T20:50:17","date_gmt":"2019-05-13T20:50:17","guid":{"rendered":"http:\/\/putridparrot.com\/blog\/?p=7059"},"modified":"2019-05-13T20:50:17","modified_gmt":"2019-05-13T20:50:17","slug":"generators-in-javascript-and-typescript","status":"publish","type":"post","link":"https:\/\/putridparrot.com\/blog\/generators-in-javascript-and-typescript\/","title":{"rendered":"Generators in JavaScript and TypeScript"},"content":{"rendered":"<p>Generators within JavaScript (and TypeScript) are similar to C# IEnumerable&#8217;s such that you can yield a value multiple times from a generator function (in either JavaScript or TypeScript), i.e.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nfunction* someValues() {\r\n    yield 1;\r\n    yield 2;\r\n    yield 3;\r\n}\r\n<\/pre>\n<p>or within a TypeScript class we can write<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nexport default class MyClass {\r\n    *someValues() {\r\n       yield 1;\r\n       yield 2;\r\n       yield 3;\r\n    }\r\n}\r\n<\/pre>\n<p>To use the <em>someValues<\/em> function we can loop using<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nfor(let i of someValues()) {\r\n    console.log(i);\r\n}\r\n<\/pre>\n<p>Each item returned is a type of <strong>{ value, done }<\/strong>, so for example <\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nvar values = someValues();\r\n\r\nconsole.log(values.next());\r\nconsole.log(values.next());\r\nconsole.log(values.next());\r\nconsole.log(values.next());\r\n<\/pre>\n<p>which would output<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n{ value: 1, done: false }\r\n{ value: 2, done: false }\r\n{ value: 3, done: false }\r\n{ value: undefined, done: true }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Generators within JavaScript (and TypeScript) are similar to C# IEnumerable&#8217;s such that you can yield a value multiple times from a generator function (in either JavaScript or TypeScript), i.e. function* someValues() { yield 1; yield 2; yield 3; } or within a TypeScript class we can write export default class MyClass { *someValues() { yield [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[45,46],"tags":[],"class_list":["post-7059","post","type-post","status-publish","format-standard","hentry","category-javascript","category-typescript"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/7059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/comments?post=7059"}],"version-history":[{"count":2,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/7059\/revisions"}],"predecessor-version":[{"id":7061,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/7059\/revisions\/7061"}],"wp:attachment":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/media?parent=7059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/categories?post=7059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/tags?post=7059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}