@qubit-ltd/common-decorator 3.10.3 → 3.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/common-decorator.cjs +230 -6292
  2. package/dist/common-decorator.cjs.map +1 -1
  3. package/dist/common-decorator.min.cjs +1 -1
  4. package/dist/common-decorator.min.cjs.map +1 -1
  5. package/dist/common-decorator.min.mjs +1 -1
  6. package/dist/common-decorator.min.mjs.map +1 -1
  7. package/dist/common-decorator.mjs +237 -6299
  8. package/dist/common-decorator.mjs.map +1 -1
  9. package/doc/api/DefaultAssignmentOptions.html +5 -5
  10. package/doc/api/DefaultOptions.html +6 -6
  11. package/doc/api/DefaultToJsonOptions.html +3 -3
  12. package/doc/api/Enum.html +4 -4
  13. package/doc/api/Model.html +4 -4
  14. package/doc/api/Page.html +3 -3
  15. package/doc/api/global.html +15 -15
  16. package/doc/api/index.html +4 -4
  17. package/doc/api/scripts/core.js +719 -726
  18. package/doc/api/scripts/core.min.js +23 -23
  19. package/doc/api/scripts/resize.js +90 -90
  20. package/doc/api/scripts/search.js +267 -265
  21. package/doc/api/scripts/search.min.js +5 -5
  22. package/doc/api/scripts/third-party/Apache-License-2.0.txt +202 -202
  23. package/doc/api/scripts/third-party/fuse.js +1749 -9
  24. package/doc/api/scripts/third-party/hljs-line-num-original.js +367 -369
  25. package/doc/api/scripts/third-party/hljs-line-num.js +1 -1
  26. package/doc/api/scripts/third-party/hljs-original.js +5260 -5171
  27. package/doc/api/scripts/third-party/hljs.js +1 -1
  28. package/doc/api/scripts/third-party/popper.js +1287 -5
  29. package/doc/api/scripts/third-party/tippy.js +1499 -1
  30. package/doc/api/scripts/third-party/tocbot.js +757 -672
  31. package/doc/api/scripts/third-party/tocbot.min.js +1 -1
  32. package/doc/api/styles/clean-jsdoc-theme-base.css +1257 -1159
  33. package/doc/api/styles/clean-jsdoc-theme-dark.css +412 -412
  34. package/doc/api/styles/clean-jsdoc-theme-light.css +482 -482
  35. package/doc/api/styles/clean-jsdoc-theme-scrollbar.css +29 -29
  36. package/doc/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -1
  37. package/doc/api/styles/clean-jsdoc-theme.min.css +1 -1
  38. package/doc/common-decorator.min.visualization.html +15 -15
  39. package/doc/common-decorator.visualization.html +15 -15
  40. package/package.json +44 -48
@@ -1,10 +1,10 @@
1
- <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Global</title><!--[if lt IE 9]>
2
- <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
- <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-namespaces"><div>Namespaces</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="ElementType"><span class="type-signature"></span>ElementType<span class="signature">(elementType)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to mark it as an array of the specified type.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
1
+ <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Global</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="home-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M19 21H5a1 1 0 0 1-1-1v-9H1l10.327-9.388a1 1 0 0 1 1.346 0L23 11h-3v9a1 1 0 0 1-1 1zM6 19h12V9.157l-6-5.454-6 5.454V19z"/></symbol><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title"><a href="index.html" class="sidebar-home-anchor">首页</a></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-类"><div>类</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-命名空间"><div>命名空间</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-全局"><div>全局</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button home-button" aria-label="go-to-homepage"><svg><use xlink:href="#home-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">本页内容</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="methods" class="subsection-title has-anchor">方法</h2><h3 class="name has-anchor" id="ElementType"><span class="type-signature"></span>ElementType<span class="signature">(elementType)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to mark it as an array of the specified type.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
4
4
  &#064;ElementType(ItemType)
5
5
  items = [];
6
6
  }
7
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>elementType</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the element in the decorated field.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#Type">Type</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="Label"><span class="type-signature"></span>Label<span class="signature">(label, i18n)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to specify its label, i.e., the display name of the field in the UI.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
7
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>elementType</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the element in the decorated field.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#Type">Type</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="Label"><span class="type-signature"></span>Label<span class="signature">(label, i18n)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to specify its label, i.e., the display name of the field in the UI.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
8
8
  &#064;Validator(nameValidator)
9
9
  &#064;Label('Foo name')
10
10
  name = '';
@@ -13,7 +13,7 @@
13
13
  &#064;Label('number', 'i18n.foo.number')
14
14
  number = 0;
15
15
  }
16
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>label</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The label of the field.</p></td></tr><tr><td class="name"><code>i18n</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The i18n key of the label. If this parameter is not specified, then the label is not internationalized.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="Enum.html">Enum</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="NameField"><span class="type-signature"></span>NameField<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates a class field to specify it as the &quot;name&quot; of the object.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
16
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>label</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The label of the field.</p></td></tr><tr><td class="name"><code>i18n</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The i18n key of the label. If this parameter is not specified, then the label is not internationalized.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="Enum.html">Enum</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="NameField"><span class="type-signature"></span>NameField<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates a class field to specify it as the &quot;name&quot; of the object.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
17
17
  &#064;Validatable(nameValidator)
18
18
  &#064;Label('Name')
19
19
  &#064;NameField
@@ -30,7 +30,7 @@
30
30
  &#064;Nullable
31
31
  birthday = '';
32
32
  }
33
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="NonEmpty"><span class="type-signature"></span>NonEmpty<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates the class field to indicate that it can be empty.</p><p>The decorated target must be a field of a class.</p><p>The decorator can decorate string fields, array fields, map fields, or set fields. Decorating other non-string, non-collection fields has no effect.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Employee {
33
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="NonEmpty"><span class="type-signature"></span>NonEmpty<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates the class field to indicate that it can be empty.</p><p>The decorated target must be a field of a class.</p><p>The decorator can decorate string fields, array fields, map fields, or set fields. Decorating other non-string, non-collection fields has no effect.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Employee {
34
34
  &#064;Validatable
35
35
  &#064;Label('Name', 'i18n.field.name')
36
36
  &#064;NonEmpty
@@ -41,7 +41,7 @@
41
41
  &#064;NonEmpty
42
42
  titles = [];
43
43
  }
44
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="global.html#Validatable">Validatable</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Normalizable"><span class="type-signature"></span>Normalizable<span class="signature">(&hellip;args)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Decorates a class field to specify a normalization function for it.</p><p>The decorated target must be a non-static field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
44
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="global.html#Validatable">Validatable</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Normalizable"><span class="type-signature"></span>Normalizable<span class="signature">(&hellip;args)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Decorates a class field to specify a normalization function for it.</p><p>The decorated target must be a non-static field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
45
45
  &#064;Normalizable(trimUppercaseString)
46
46
  number = '';
47
47
  }
@@ -59,7 +59,7 @@
59
59
  &#064;Normalizable
60
60
  person = new Person();
61
61
  }
62
- </code></pre><p>The default normalization function does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is an array, it returns an array whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes">&lt;repeatable><br></td><td class="description last"><p>The array of arguments for calling this decorator. If it has only one argument, the only argument is the specified normalizer of this decorator, and this function should return another function which is the decorator of a class; If it has two arguments, the first argument is the decorated target (in the case of decorating a class field, this argument should always be <code>undefined</code>), and the second argument is the context object containing information about the decorated target.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="global.html#defaultNormalizer">defaultNormalizer</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>If this function has only one argument, this function returns another function which is the decorator of a field; otherwise, this function sets the normalizer of the decorated field and returns nothing.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="Nullable"><span class="type-signature"></span>Nullable<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates the class field to indicate that it can be <code>null</code>.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Employee {
62
+ </code></pre><p>The default normalization function does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is an array, it returns an array whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th>特性</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes">&lt;可重复><br></td><td class="description last"><p>The array of arguments for calling this decorator. If it has only one argument, the only argument is the specified normalizer of this decorator, and this function should return another function which is the decorator of a class; If it has two arguments, the first argument is the decorated target (in the case of decorating a class field, this argument should always be <code>undefined</code>), and the second argument is the context object containing information about the decorated target.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="global.html#defaultNormalizer">defaultNormalizer</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>If this function has only one argument, this function returns another function which is the decorator of a field; otherwise, this function sets the normalizer of the decorated field and returns nothing.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="Nullable"><span class="type-signature"></span>Nullable<span class="signature">(field, kind, name, metadata)</span></h3><div class="description"><p>Decorates the class field to indicate that it can be <code>null</code>.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Employee {
63
63
  &#064;Validatable(nameValidator)
64
64
  &#064;Label('Name', 'i18n.field.name')
65
65
  name = '';
@@ -69,7 +69,7 @@
69
69
  &#064;Nullable
70
70
  level = 0;
71
71
  }
72
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="global.html#Validatable">Validatable</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Readonly"><span class="type-signature"></span>Readonly<span class="signature">(value, context)</span></h3><div class="description"><p>Decorates a class field to mark it as read-only.</p><p>The decorated target must be a class field. This decorator does not support decorating classes, methods, getters, setters, or accessors.</p><p>The behavior of this decorator follows these rules:</p><ol><li>If the field has a non-undefined initial value when defined, it becomes immediately read-only.</li><li>If the field has no initial value or is undefined, it will become read-only after the first assignment of any value (including undefined).</li></ol><h5>Usage examples:</h5><pre class="prettyprint source lang-js"><code>class Meal {
72
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>The decorated target. This argument should be <code>undefined</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>kind</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The kind of decorated target. This argument should be <code>field</code> if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the decorated target. This argument should be the name of a class field if this decorator decorates a class field.</p></td></tr><tr><td class="name"><code>metadata</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The metadata associated to the class the decorated target belongs to.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="global.html#Validatable">Validatable</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Readonly"><span class="type-signature"></span>Readonly<span class="signature">(value, context)</span></h3><div class="description"><p>Decorates a class field to mark it as read-only.</p><p>The decorated target must be a class field. This decorator does not support decorating classes, methods, getters, setters, or accessors.</p><p>The behavior of this decorator follows these rules:</p><ol><li>If the field has a non-undefined initial value when defined, it becomes immediately read-only.</li><li>If the field has no initial value or is undefined, it will become read-only after the first assignment of any value (including undefined).</li></ol><h5>Usage examples:</h5><pre class="prettyprint source lang-js"><code>class Meal {
73
73
  // Field with initial value - immediately read-only
74
74
  &#64;Readonly
75
75
  entree = 'steak';
@@ -94,18 +94,18 @@ dinner.dessert = 'cake';
94
94
  const lunch = new Meal();
95
95
  lunch.dessert = undefined; // This is allowed (first assignment)
96
96
  // lunch.dessert = 'salad'; // This will throw an error (second assignment)
97
- </code></pre><h2>Compatibility Note</h2><p>This decorator <strong>only</strong> supports the ECMAScript decorators specification from Stage 3 proposal that was accepted in November 2023 or later. It is incompatible with:</p><ul><li>Legacy experimental decorators (TypeScript's <code>experimentalDecorators</code> option)</li><li>Earlier Stage 2 decorator proposals</li><li>Any decorator implementations before November 2023</li></ul><p>Ensure your environment supports the latest ECMAScript 2023+ decorators specification.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The value of the decorated element (for field decorators, this value is always <code>undefined</code>)</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The decorator context object with properties:</p><ul><li>kind: &quot;field&quot;</li><li>name: the name of the field (string | symbol)</li><li>access: { get(): unknown, set(value: unknown): void }</li><li>static: boolean</li><li>private: boolean</li><li>addInitializer(initializer: () =&gt; void): void</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>If the decorator is applied to anything other than a class field.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">Error</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>returns a function that initializes the initial value of the decorated field.</p></div></div><h3 class="name has-anchor" id="Timeout"><span class="type-signature"></span>Timeout<span class="signature">(milliseconds)</span></h3><div class="description"><p>The decorator which delays the execution of a function.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>&#064;Timeout(1000)
97
+ </code></pre><h2>Compatibility Note</h2><p>This decorator <strong>only</strong> supports the ECMAScript decorators specification from Stage 3 proposal that was accepted in November 2023 or later. It is incompatible with:</p><ul><li>Legacy experimental decorators (TypeScript's <code>experimentalDecorators</code> option)</li><li>Earlier Stage 2 decorator proposals</li><li>Any decorator implementations before November 2023</li></ul><p>Ensure your environment supports the latest ECMAScript 2023+ decorators specification.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The value of the decorated element (for field decorators, this value is always <code>undefined</code>)</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The decorator context object with properties:</p><ul><li>kind: &quot;field&quot;</li><li>name: the name of the field (string | symbol)</li><li>access: { get(): unknown, set(value: unknown): void }</li><li>static: boolean</li><li>private: boolean</li><li>addInitializer(initializer: () =&gt; void): void</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>抛出异常:</strong><dl><dt><div class="param-desc"><p>If the decorator is applied to anything other than a class field.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">Error</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>returns a function that initializes the initial value of the decorated field.</p></div></div><h3 class="name has-anchor" id="Timeout"><span class="type-signature"></span>Timeout<span class="signature">(milliseconds)</span></h3><div class="description"><p>The decorator which delays the execution of a function.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>&#064;Timeout(1000)
98
98
  function doSomething() {
99
99
  console.log('do something.');
100
100
  }
101
101
 
102
102
  doSomething(); // will print 'do something.' after 1 second.
103
103
 
104
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>milliseconds</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last"><p>The time to delay, in milliseconds. The default value is 0.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The descriptor of the decorated function.</p></div></div><h3 class="name has-anchor" id="Type"><span class="type-signature"></span>Type<span class="signature">(type)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to mark it as an object of the specified type.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
104
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>milliseconds</code></td><td class="type"><span class="param-type">Number</span></td><td class="description last"><p>The time to delay, in milliseconds. The default value is 0.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The descriptor of the decorated function.</p></div></div><h3 class="name has-anchor" id="Type"><span class="type-signature"></span>Type<span class="signature">(type)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Decorates a class field to mark it as an object of the specified type.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
105
105
  &#064;Type(ItemType)
106
106
  item = null;
107
107
  }
108
- </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to which the decorated field belongs.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#ElementType">ElementType</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="Validatable"><span class="type-signature"></span>Validatable<span class="signature">(&hellip;args)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Decorates a class field to specify a verification function for it.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
108
+ </code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to which the decorated field belongs.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#ElementType">ElementType</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The field decorating function, which returns <code>void</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="Validatable"><span class="type-signature"></span>Validatable<span class="signature">(&hellip;args)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Decorates a class field to specify a verification function for it.</p><p>The decorated target must be a field of a class.</p><h5>Usage example:</h5><pre class="prettyprint source lang-js"><code>class Foo {
109
109
  &#064;Validatable(validateNameField)
110
110
  &#064;Label('Name', 'i18n.field.name')
111
111
  name = '';
@@ -142,7 +142,7 @@ function validateIntegerField(value, context) {
142
142
  ...
143
143
  return new ValidationResult(true);
144
144
  }
145
- </code></pre><p>Where</p><ul><li>The parameter <code>value</code> is the field value to be verified;</li><li>The parameter <code>context</code> is an <code>Object</code>, representing the validation context. It may have the following properties:<ul><li><code>instance: object</code>: the object to which the field belongs.</li><li><code>owner: string|undefined</code>: the name of the owner (a person) of the field.</li><li><code>field: string</code>: the name of the field to be validated.</li><li><code>type: function</code>: the constructor of the field to be validated. If the field is decorated by the <code>@Type</code> decorator, this property is the argument of the decorator, otherwise it is the constructor of the default value of the field. If the default value of the field is <code>null</code> or <code>undefined</code>, this property is set to <code>undefined</code>.</li><li><code>label: string</code>: the display label of the field to be validated.</li><li><code>nullable: boolean</code>: whether the field to be validated is nullable.</li><li><code>nonEmpty: boolean</code>: whether the field to be validated is non-empty.</li><li><code>extraMessage: string</code>: extra error message.</li></ul></li><li>The return value of the function must be a <code>ValidationResult</code> object, representing the verification result.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes">&lt;repeatable><br></td><td class="description last"><p>The array of arguments for calling this decorator. If it has only one argument, the only argument is the specified validator of this decorator, and this function should return another function which is the decorator of a class; If it has two arguments, the first argument is the decorated target (in the case of decorating a class field, this argument should always be <code>undefined</code>), and the second argument is the context object containing information about the decorated target.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="global.html#defaultValidator">defaultValidator</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>If this function has only one argument, this function returns another function which is the decorator of a field; otherwise, this function sets the normalizer of the decorated field and returns nothing.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="assign"><span class="type-signature"></span>assign<span class="signature">(target, source, options)</span><span class="type-signature"> &rarr; {Class}</span></h3><div class="description"><p>Copies the properties from a source data object to the target object, only copying properties defined in the class of the target object.</p><p>If a property in the data object is <code>undefined</code> or <code>null</code>, the function sets the property of the target object to the default value.</p><p>Note that the data object may have a different prototype than the target object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>target</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The target object which will be assigned to. This object must be an instance of the specified <code>Class</code>. Each fields of this object will be assigned from the corresponding fields of the source object, recursively.</p></td></tr><tr><td class="name"><code>source</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The source object which will be assigned from. This object may be any plain old JavaScript object without class information.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the optional options for the assignment. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: string | NamingStyle</code>, the naming style of the source object, i.e., the first argument of the <code>assign()</code> method. The default value of this argument is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: string | NamingStyle</code>, the naming style of the target object, i.e., the object calling the <code>assign()</code> method. The default value of this argument is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The target object after assignment.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Class</span></dd></dl></div><h3 class="name has-anchor" id="create"><span class="type-signature"></span>create<span class="signature">(Class, obj, options)</span><span class="type-signature"> &rarr; {Class|null}</span></h3><div class="description"><p>Creates a new instance of the specified class based on a data object.</p><p>It copies the property values from the corresponding properties of the specified data object maintaining the same prototype and class definition.</p><p>If a property in the data object is <code>undefined</code> or <code>null</code>, the function sets the property of the created instance to the default value.</p><p>This method is usually used to transform a plain JSON object into the specified domain object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of a class.</p></td></tr><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The data object, usually obtained from a JSON object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>If the <code>obj</code> is <code>undefined</code> or <code>null</code>, returns <code>null</code>; otherwise, returns a new instance of the model class whose fields are initialized with the data in the <code>obj</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Class</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="createArray"><span class="type-signature"></span>createArray<span class="signature">(Class, array, options)</span><span class="type-signature"> &rarr; {array}</span></h3><div class="description"><p>Creates a new array of instances of the specified class based on an array of data objects.</p><p>The property values of each element in the created instances array are copied from the corresponding elements in the data object array, maintaining the same prototype and class definition.</p><p>This method is usually used to transform an array of plain JSON objects into an array of specified domain objects.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the specified class.</p></td></tr><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">array</span></td><td class="description last"><p>The specified array of objects.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>A new array of instances of the specified class, or <code>null</code> if the specified array is <code>undefined</code> or <code>null</code>. Each element of the created array is an instance of the specified class, whose fields are initialized with the corresponding element of the specified object array.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">array</span></dd></dl></div><h3 class="name has-anchor" id="createDeferredReadonlyInitializer"><span class="type-signature"></span>createDeferredReadonlyInitializer<span class="signature">(propertyName)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Creates an initializer function that sets the field to read-only after the first assignment of any value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>propertyName</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">symbol</span></td><td class="description last"><p>the name of the property</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the initializer function</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="createImmediateReadonlyInitializer"><span class="type-signature"></span>createImmediateReadonlyInitializer<span class="signature">(propertyName, initialValue)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Creates an initializer function that immediately sets the field to read-only.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>propertyName</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">symbol</span></td><td class="description last"><p>the name of the property</p></td></tr><tr><td class="name"><code>initialValue</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>the initial value of the property</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the initializer function</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="createPage"><span class="type-signature"></span>createPage<span class="signature">(Class, page, options)</span><span class="type-signature"> &rarr; {<a href="Page.html">Page</a>}</span></h3><div class="description"><p>Creates a new page object based on the specified pagination data object.</p><p>Typically, the pagination data object is the JSON representation of a list of domain objects obtained from a server using the GET method, and the object should conform to the <code>Page</code> class definition.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the page content.</p></td></tr><tr><td class="name"><code>page</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The data of the page.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li><li><a href="Page.html">Page</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The created <code>Page</code> object.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type"><a href="Page.html">Page</a></span></dd></dl></div><h3 class="name has-anchor" id="defaultNormalizer"><span class="type-signature"></span>defaultNormalizer<span class="signature">(value, context)</span><span class="type-signature"> &rarr; {any}</span></h3><div class="description"><p>A default normalizer for a non-static class field.</p><p>This normalizer does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself without changing it;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is a collection, it returns the same type of collection whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul><p>Currently, the following JavaScript build-in collection types are supported:</p><ul><li><code>Array</code>, <code>Int8Array</code>, <code>Uint8Array</code>, <code>Uint8ClampedArray</code>, <code>Int16Array</code>, <code>Uint16Array</code>, <code>Int32Array</code>, <code>Uint32Array</code>, <code>Float32Array</code>, <code>Float64Array</code>, <code>BigInt64Array</code>, <code>BigUint64Array</code>: the normalization function will be called to normalize each element in the collection.</li><li><code>Set</code>, <code>WeakSet</code>: the normalization function will be called to normalize each entry in the set.</li><li><code>Map</code>, <code>WeakMap</code>: the normalization function will be called to normalize each value in the map.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The value to be normalized.</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The context of normalization. It is an object with the following fields:</p><ul><li><code>path: string</code>, the path of the root object of this object. The default value of this option is <code>''</code>.</li><li><code>type: function</code>, the type of the field to be normalized.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of this object, the values are the type of the fields, represented as the constructor function of the type. The path of the root of this object is an empty, therefore the path of the direct field of this object is of the form <code>'.field'</code>, and the path of the sub-field of a field is of the form <code>'.field.subField'</code>. The default value of this option is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value of this option is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The normalized value.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="defaultValidator"><span class="type-signature"></span>defaultValidator<span class="signature">(value, context)</span><span class="type-signature"> &rarr; {ValidationResult}</span></h3><div class="description"><p>A default validator for a non-static class field.</p><p>This validator does the following things:</p><ul><li>If the field value is <code>undefined</code> or <code>null</code>, and the field is not decorated with <code>@Nullable</code>, an error is reported.</li><li>If the field value is an empty string or an empty collection, and the field is decorated with <code>@NonEmpty</code>, an error is reported.</li><li>If the field value is a collection, it recursively validates each element in the collection.</li><li>If the field value has an initial value, it validates whether the field value has the same type with its initial value.</li><li>If the field is decorated with <code>@Type</code>, it validates whether the field value has the type specified by the <code>@Type</code>.</li><li>If the field is a collection and is decorated with <code>@ElementType</code>, it validates whether each element of the field value has the type specified by the <code>@ElementType</code>.</li><li>If the value is an object with the <code>validate()</code> method, it returns the result of calling the <code>validate()</code> method of the object.</li><li>Otherwise, it does nothing and returns a success validation result.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>the value to be validated.</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the validation context.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#Validatable">Validatable</a></li><li>ValidationResult</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the validation result.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">ValidationResult</span></dd></dl></div><h3 class="name has-anchor" id="enumNormalizer"><span class="type-signature"></span>enumNormalizer<span class="signature">(EnumClass)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>The normalizer used to normalize the value of an enumeration.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>EnumClass</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor function of an enumeration class.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The normalizer function for the specified enumeration class.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="getDefaultInstance"><span class="type-signature"></span>getDefaultInstance<span class="signature">(Class)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Get the default instance of the specified class, or create a new instance if it does not exist.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the specified class.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The default instance of the specified class, or a new instance will be created if it does not exist.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="getFieldElementType"><span class="type-signature"></span>getFieldElementType<span class="signature">(Class, field, path, options)</span><span class="type-signature"> &rarr; {function|null}</span></h3><div class="description"><p>Gets the element type of a field of an object.</p><p>The function will first check the annotated element type information of the specified field of the object. If the annotated type information is found, the function will return it. Otherwise, the function will check the additional type information provided by the options. If the additional type information is found, the function will return it. Otherwise, the function will return <code>null</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the object.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the name of the field.</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the path of the field in the property tree of the original root object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the assignment.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the element type of the specified field of the object, or <code>null</code> if the field element type cannot be inferred.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getFieldType"><span class="type-signature"></span>getFieldType<span class="signature">(Class, field, path, options)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Gets the type of the specified field of an object.</p><p>The function will first check the annotated type information of the specified field of the object. If the annotated type information is found, the function will return it. Otherwise, the function will check the additional type information provided by the options. If the additional type information is found, the function will return it. Otherwise, the function will return <code>undefined</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the object.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the name of the field.</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the path of the field in the property tree of the original root object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the assignment.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the type of the specified field of the object, or <code>undefined</code> if the field type cannot be inferred.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="getSourceField"><span class="type-signature"></span>getSourceField<span class="signature">(targetField, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Gets the name of the field of the source object from the corresponding field of the target object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>targetField</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The key of the target object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The options of the cloning algorithm.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The corresponding key of the source object.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="hasOwnProperty"><span class="type-signature"></span>hasOwnProperty<span class="signature">(Class, field)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines whether a class directly owns a specific property (not inherited from parent classes).</p><p>This function checks if the specified property is directly defined on either:</p><ol><li>The prototype of the class itself, or</li><li>The default instance of the class</li></ol><p>Unlike JavaScript's built-in <code>Object.prototype.hasOwnProperty</code>, this function:</p><ul><li>Accepts a class constructor rather than an object instance</li><li>Checks both the prototype and default instance</li><li>Only reports properties owned directly by the class (not inherited properties)</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to check.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the property to check for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>hasPrototypeFunction For checking inherited properties in the prototype chain.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns true if and only if the property is directly defined by the class (either on its prototype or default instance), not inherited from parent classes.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasProperty"><span class="type-signature"></span>hasProperty<span class="signature">(Class, field)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines whether a class has a specific property (including inherited properties).</p><p>This function checks if the specified property is defined on either:</p><ol><li>The prototype chain of the class, or</li><li>The default instance of the class</li></ol><p>Unlike <code>hasOwnProperty()</code> which only checks direct properties, this function:</p><ul><li>Accepts a class constructor rather than an object instance</li><li>Checks both the prototype chain and default instance</li><li>Reports properties defined anywhere in the inheritance chain</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to check.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the property to check for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>hasOwnProperty For checking only direct properties not inherited from parent classes.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns true if the property is defined by the class or any of its parent classes (either on its prototype chain or default instance).</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasPrototypeFunction"><span class="type-signature"></span>hasPrototypeFunction<span class="signature">(Class, name)</span><span class="type-signature"> &rarr; {Boolean}</span></h3><div class="description"><p>Determines whether the specified prototype function exists anywhere in the prototype chain of a specified class.</p><p>This function checks the entire prototype chain, including methods inherited from parent classes. It uses <code>Reflect.has()</code> which searches through the complete prototype chain, unlike <code>Object.prototype.hasOwnProperty</code> which only checks direct properties.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>Constructor for the specified class.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the specified prototype function.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>hasOwnPrototypeFunction Checks only methods defined directly on the class.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns true if the specified function exists anywhere in the prototype chain of the class, whether defined by the class itself or inherited from a parent class.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Boolean</span></dd></dl></div><h3 class="name has-anchor" id="isEnumClass"><span class="type-signature"></span>isEnumClass<span class="signature">(Class)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether a specified class is an enumeration class decorated by <code>@Enum</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor function of a class.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p><code>true</code> if the specified class is an enumeration class decorated by <code>@Enum</code>; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isEnumerator"><span class="type-signature"></span>isEnumerator<span class="signature">(value)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether a specified value is an enumerator of an enumeration class, i.e., the static constants of a class decorated by <code>@Enum</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The specified value.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p><code>true</code> if the specified value is an enumerator of an enumeration class, i.e., the static constants of a class decorated by <code>@Enum</code>; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidPageSource"><span class="type-signature"></span>isValidPageSource<span class="signature">(page, options)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether the specified object is a valid page object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>page</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The object to be tested.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The options of the assignment.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p><code>true</code> if the specified object is a valid page source object; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="normalize"><span class="type-signature"></span>normalize<span class="signature">(value)</span><span class="type-signature"> &rarr; {any}</span></h3><div class="description"><p>Normalizes a value with the default normalizer.</p><p>This function does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is a collection, it returns the same type of collection whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul><p>Currently, the following JavaScript build-in collection types are supported:</p><ul><li><code>Array</code>, <code>Int8Array</code>, <code>Uint8Array</code>, <code>Uint8ClampedArray</code>, <code>Int16Array</code>, <code>Uint16Array</code>, <code>Int32Array</code>, <code>Uint32Array</code>, <code>Float32Array</code>, <code>Float64Array</code>, <code>BigInt64Array</code>, <code>BigUint64Array</code>: the normalization function will be called to normalize each element in the collection.</li><li><code>Set</code>, <code>WeakSet</code>: the normalization function will be called to normalize each entry in the set.</li><li><code>Map</code>, <code>WeakMap</code>: the normalization function will be called to normalize each value in the map.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The value to be normalized.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The normalized value.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="stringifyId"><span class="type-signature"></span>stringifyId<span class="signature">(id)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Convert an id to a string.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>id</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">number</span> |<wbr> <span class="param-type">bigint</span></td><td class="description last"><p>The id to be converted.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The string representation of the id, or an empty string if the id is <code>null</code> or <code>undefined</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toJSON"><span class="type-signature"></span>toJSON<span class="signature">(value, options)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Converts an object to the object to be serialized by <code>JSON.stringify()</code>.</p><p>If the value has a <code>toJSON()</code> method, it's responsible to define what data will be serialized. Instead of the object being serialized, the value returned by the <code>toJSON()</code> method when called will be serialized.</p><p><strong>NOTE:</strong> this function returns an object to be serialized by <code>JSON.stringify()</code>, instead of a JSON string. Use <code>JSON.stringify()</code> or <code>this.toJsonString()</code> methods to serialize this object into a JSON string.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>the value to be serialized.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the additional options for the serialization. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('toJSON')</code>. Available options are:</p><pre><code>- `normalize: boolean`, indicates whether to normalize this object
145
+ </code></pre><p>Where</p><ul><li>The parameter <code>value</code> is the field value to be verified;</li><li>The parameter <code>context</code> is an <code>Object</code>, representing the validation context. It may have the following properties:<ul><li><code>instance: object</code>: the object to which the field belongs.</li><li><code>owner: string|undefined</code>: the name of the owner (a person) of the field.</li><li><code>field: string</code>: the name of the field to be validated.</li><li><code>type: function</code>: the constructor of the field to be validated. If the field is decorated by the <code>@Type</code> decorator, this property is the argument of the decorator, otherwise it is the constructor of the default value of the field. If the default value of the field is <code>null</code> or <code>undefined</code>, this property is set to <code>undefined</code>.</li><li><code>label: string</code>: the display label of the field to be validated.</li><li><code>nullable: boolean</code>: whether the field to be validated is nullable.</li><li><code>nonEmpty: boolean</code>: whether the field to be validated is non-empty.</li><li><code>extraMessage: string</code>: extra error message.</li></ul></li><li>The return value of the function must be a <code>ValidationResult</code> object, representing the verification result.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th>特性</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes">&lt;可重复><br></td><td class="description last"><p>The array of arguments for calling this decorator. If it has only one argument, the only argument is the specified validator of this decorator, and this function should return another function which is the decorator of a class; If it has two arguments, the first argument is the decorated target (in the case of decorating a class field, this argument should always be <code>undefined</code>), and the second argument is the context object containing information about the decorated target.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="global.html#defaultValidator">defaultValidator</a></li><li><a href="Model.html">Model</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>If this function has only one argument, this function returns another function which is the decorator of a field; otherwise, this function sets the normalizer of the decorated field and returns nothing.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="assign"><span class="type-signature"></span>assign<span class="signature">(target, source, options)</span><span class="type-signature"> &rarr; {Class}</span></h3><div class="description"><p>Copies the properties from a source data object to the target object, only copying properties defined in the class of the target object.</p><p>If a property in the data object is <code>undefined</code> or <code>null</code>, the function sets the property of the target object to the default value.</p><p>Note that the data object may have a different prototype than the target object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>target</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The target object which will be assigned to. This object must be an instance of the specified <code>Class</code>. Each fields of this object will be assigned from the corresponding fields of the source object, recursively.</p></td></tr><tr><td class="name"><code>source</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The source object which will be assigned from. This object may be any plain old JavaScript object without class information.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the optional options for the assignment. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: string | NamingStyle</code>, the naming style of the source object, i.e., the first argument of the <code>assign()</code> method. The default value of this argument is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: string | NamingStyle</code>, the naming style of the target object, i.e., the object calling the <code>assign()</code> method. The default value of this argument is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The target object after assignment.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">Class</span></dd></dl></div><h3 class="name has-anchor" id="create"><span class="type-signature"></span>create<span class="signature">(Class, obj, options)</span><span class="type-signature"> &rarr; {Class|null}</span></h3><div class="description"><p>Creates a new instance of the specified class based on a data object.</p><p>It copies the property values from the corresponding properties of the specified data object maintaining the same prototype and class definition.</p><p>If a property in the data object is <code>undefined</code> or <code>null</code>, the function sets the property of the created instance to the default value.</p><p>This method is usually used to transform a plain JSON object into the specified domain object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of a class.</p></td></tr><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The data object, usually obtained from a JSON object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>If the <code>obj</code> is <code>undefined</code> or <code>null</code>, returns <code>null</code>; otherwise, returns a new instance of the model class whose fields are initialized with the data in the <code>obj</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">Class</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="createArray"><span class="type-signature"></span>createArray<span class="signature">(Class, array, options)</span><span class="type-signature"> &rarr; {array}</span></h3><div class="description"><p>Creates a new array of instances of the specified class based on an array of data objects.</p><p>The property values of each element in the created instances array are copied from the corresponding elements in the data object array, maintaining the same prototype and class definition.</p><p>This method is usually used to transform an array of plain JSON objects into an array of specified domain objects.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the specified class.</p></td></tr><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">array</span></td><td class="description last"><p>The specified array of objects.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>A new array of instances of the specified class, or <code>null</code> if the specified array is <code>undefined</code> or <code>null</code>. Each element of the created array is an instance of the specified class, whose fields are initialized with the corresponding element of the specified object array.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">array</span></dd></dl></div><h3 class="name has-anchor" id="createDeferredReadonlyInitializer"><span class="type-signature"></span>createDeferredReadonlyInitializer<span class="signature">(propertyName)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Creates an initializer function that sets the field to read-only after the first assignment of any value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>propertyName</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">symbol</span></td><td class="description last"><p>the name of the property</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the initializer function</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="createImmediateReadonlyInitializer"><span class="type-signature"></span>createImmediateReadonlyInitializer<span class="signature">(propertyName, initialValue)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>Creates an initializer function that immediately sets the field to read-only.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>propertyName</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">symbol</span></td><td class="description last"><p>the name of the property</p></td></tr><tr><td class="name"><code>initialValue</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>the initial value of the property</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the initializer function</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="createPage"><span class="type-signature"></span>createPage<span class="signature">(Class, page, options)</span><span class="type-signature"> &rarr; {<a href="Page.html">Page</a>}</span></h3><div class="description"><p>Creates a new page object based on the specified pagination data object.</p><p>Typically, the pagination data object is the JSON representation of a list of domain objects obtained from a server using the GET method, and the object should conform to the <code>Page</code> class definition.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the page content.</p></td></tr><tr><td class="name"><code>page</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The data of the page.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the creation. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('assign')</code>. Available options are:</p><ul><li><code>normalize: boolean</code>, indicates whether to normalize this object after the assignment. The default value is <code>true</code>.</li><li><code>convertNaming: boolean</code>, indicates whether to convert the naming style of the target object. The default value is <code>false</code>.</li><li><code>sourceNamingStyle: NamingStyle</code>, the naming style of the source object. The default value is LOWER_UNDERSCORE.</li><li><code>targetNamingStyle: NamingStyle</code>, the naming style of the target object. The default value is LOWER_CAMEL.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the fields, represented as the constructor function of the type. The default value is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('assign')</li><li><a href="Page.html">Page</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The created <code>Page</code> object.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type"><a href="Page.html">Page</a></span></dd></dl></div><h3 class="name has-anchor" id="defaultNormalizer"><span class="type-signature"></span>defaultNormalizer<span class="signature">(value, context)</span><span class="type-signature"> &rarr; {any}</span></h3><div class="description"><p>A default normalizer for a non-static class field.</p><p>This normalizer does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself without changing it;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is a collection, it returns the same type of collection whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul><p>Currently, the following JavaScript build-in collection types are supported:</p><ul><li><code>Array</code>, <code>Int8Array</code>, <code>Uint8Array</code>, <code>Uint8ClampedArray</code>, <code>Int16Array</code>, <code>Uint16Array</code>, <code>Int32Array</code>, <code>Uint32Array</code>, <code>Float32Array</code>, <code>Float64Array</code>, <code>BigInt64Array</code>, <code>BigUint64Array</code>: the normalization function will be called to normalize each element in the collection.</li><li><code>Set</code>, <code>WeakSet</code>: the normalization function will be called to normalize each entry in the set.</li><li><code>Map</code>, <code>WeakMap</code>: the normalization function will be called to normalize each value in the map.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The value to be normalized.</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The context of normalization. It is an object with the following fields:</p><ul><li><code>path: string</code>, the path of the root object of this object. The default value of this option is <code>''</code>.</li><li><code>type: function</code>, the type of the field to be normalized.</li><li><code>types: object</code>, the additional information about types of fields of classes. The keys of this object are the path of the fields or sub-fields of this object, the values are the type of the fields, represented as the constructor function of the type. The path of the root of this object is an empty, therefore the path of the direct field of this object is of the form <code>'.field'</code>, and the path of the sub-field of a field is of the form <code>'.field.subField'</code>. The default value of this option is <code>{}</code>.</li><li><code>elementTypes: object</code>, the additional information about types of elements of fields of classes. The keys of this object are the path of the fields or sub-fields of the target object, the values are the type of the elements, represented as the constructor function of the type. The default value of this option is <code>{}</code>.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The normalized value.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="defaultValidator"><span class="type-signature"></span>defaultValidator<span class="signature">(value, context)</span><span class="type-signature"> &rarr; {ValidationResult}</span></h3><div class="description"><p>A default validator for a non-static class field.</p><p>This validator does the following things:</p><ul><li>If the field value is <code>undefined</code> or <code>null</code>, and the field is not decorated with <code>@Nullable</code>, an error is reported.</li><li>If the field value is an empty string or an empty collection, and the field is decorated with <code>@NonEmpty</code>, an error is reported.</li><li>If the field value is a collection, it recursively validates each element in the collection.</li><li>If the field value has an initial value, it validates whether the field value has the same type with its initial value.</li><li>If the field is decorated with <code>@Type</code>, it validates whether the field value has the type specified by the <code>@Type</code>.</li><li>If the field is a collection and is decorated with <code>@ElementType</code>, it validates whether each element of the field value has the type specified by the <code>@ElementType</code>.</li><li>If the value is an object with the <code>validate()</code> method, it returns the result of calling the <code>validate()</code> method of the object.</li><li>Otherwise, it does nothing and returns a success validation result.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>the value to be validated.</p></td></tr><tr><td class="name"><code>context</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the validation context.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li><a href="Model.html">Model</a></li><li><a href="global.html#Validatable">Validatable</a></li><li>ValidationResult</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the validation result.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">ValidationResult</span></dd></dl></div><h3 class="name has-anchor" id="enumNormalizer"><span class="type-signature"></span>enumNormalizer<span class="signature">(EnumClass)</span><span class="type-signature"> &rarr; {function}</span></h3><div class="description"><p>The normalizer used to normalize the value of an enumeration.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>EnumClass</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor function of an enumeration class.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The normalizer function for the specified enumeration class.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="getDefaultInstance"><span class="type-signature"></span>getDefaultInstance<span class="signature">(Class)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Get the default instance of the specified class, or create a new instance if it does not exist.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the specified class.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The default instance of the specified class, or a new instance will be created if it does not exist.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="getFieldElementType"><span class="type-signature"></span>getFieldElementType<span class="signature">(Class, field, path, options)</span><span class="type-signature"> &rarr; {function|null}</span></h3><div class="description"><p>Gets the element type of a field of an object.</p><p>The function will first check the annotated element type information of the specified field of the object. If the annotated type information is found, the function will return it. Otherwise, the function will check the additional type information provided by the options. If the additional type information is found, the function will return it. Otherwise, the function will return <code>null</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the object.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the name of the field.</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the path of the field in the property tree of the original root object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the assignment.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the element type of the specified field of the object, or <code>null</code> if the field element type cannot be inferred.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getFieldType"><span class="type-signature"></span>getFieldType<span class="signature">(Class, field, path, options)</span><span class="type-signature"> &rarr; {function|undefined}</span></h3><div class="description"><p>Gets the type of the specified field of an object.</p><p>The function will first check the annotated type information of the specified field of the object. If the annotated type information is found, the function will return it. Otherwise, the function will check the additional type information provided by the options. If the additional type information is found, the function will return it. Otherwise, the function will return <code>undefined</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class of the object.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the name of the field.</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>the path of the field in the property tree of the original root object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the additional options for the assignment.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the type of the specified field of the object, or <code>undefined</code> if the field type cannot be inferred.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">function</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="getSourceField"><span class="type-signature"></span>getSourceField<span class="signature">(targetField, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Gets the name of the field of the source object from the corresponding field of the target object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>targetField</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The key of the target object.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The options of the cloning algorithm.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The corresponding key of the source object.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="hasOwnProperty"><span class="type-signature"></span>hasOwnProperty<span class="signature">(Class, field)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines whether a class directly owns a specific property (not inherited from parent classes).</p><p>This function checks if the specified property is directly defined on either:</p><ol><li>The prototype of the class itself, or</li><li>The default instance of the class</li></ol><p>Unlike JavaScript's built-in <code>Object.prototype.hasOwnProperty</code>, this function:</p><ul><li>Accepts a class constructor rather than an object instance</li><li>Checks both the prototype and default instance</li><li>Only reports properties owned directly by the class (not inherited properties)</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to check.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the property to check for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>hasPrototypeFunction For checking inherited properties in the prototype chain.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>Returns true if and only if the property is directly defined by the class (either on its prototype or default instance), not inherited from parent classes.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasProperty"><span class="type-signature"></span>hasProperty<span class="signature">(Class, field)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines whether a class has a specific property (including inherited properties).</p><p>This function checks if the specified property is defined on either:</p><ol><li>The prototype chain of the class, or</li><li>The default instance of the class</li></ol><p>Unlike <code>hasOwnProperty()</code> which only checks direct properties, this function:</p><ul><li>Accepts a class constructor rather than an object instance</li><li>Checks both the prototype chain and default instance</li><li>Reports properties defined anywhere in the inheritance chain</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor of the class to check.</p></td></tr><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the property to check for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>hasOwnProperty For checking only direct properties not inherited from parent classes.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>Returns true if the property is defined by the class or any of its parent classes (either on its prototype chain or default instance).</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasPrototypeFunction"><span class="type-signature"></span>hasPrototypeFunction<span class="signature">(Class, name)</span><span class="type-signature"> &rarr; {Boolean}</span></h3><div class="description"><p>Determines whether the specified prototype function exists anywhere in the prototype chain of a specified class.</p><p>This function checks the entire prototype chain, including methods inherited from parent classes. It uses <code>Reflect.has()</code> which searches through the complete prototype chain, unlike <code>Object.prototype.hasOwnProperty</code> which only checks direct properties.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>Constructor for the specified class.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the specified prototype function.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>hasOwnPrototypeFunction Checks only methods defined directly on the class.</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>Returns true if the specified function exists anywhere in the prototype chain of the class, whether defined by the class itself or inherited from a parent class.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">Boolean</span></dd></dl></div><h3 class="name has-anchor" id="isEnumClass"><span class="type-signature"></span>isEnumClass<span class="signature">(Class)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether a specified class is an enumeration class decorated by <code>@Enum</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>Class</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The constructor function of a class.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p><code>true</code> if the specified class is an enumeration class decorated by <code>@Enum</code>; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isEnumerator"><span class="type-signature"></span>isEnumerator<span class="signature">(value)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether a specified value is an enumerator of an enumeration class, i.e., the static constants of a class decorated by <code>@Enum</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The specified value.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p><code>true</code> if the specified value is an enumerator of an enumeration class, i.e., the static constants of a class decorated by <code>@Enum</code>; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidPageSource"><span class="type-signature"></span>isValidPageSource<span class="signature">(page, options)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests whether the specified object is a valid page object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>page</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The object to be tested.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The options of the assignment.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p><code>true</code> if the specified object is a valid page source object; <code>false</code> otherwise.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="normalize"><span class="type-signature"></span>normalize<span class="signature">(value)</span><span class="type-signature"> &rarr; {any}</span></h3><div class="description"><p>Normalizes a value with the default normalizer.</p><p>This function does the following things:</p><ul><li>If the value is <code>undefined</code> or <code>null</code>, it returns the value itself;</li><li>If the value is a string, it returns the trimmed string;</li><li>If the value is a collection, it returns the same type of collection whose elements are normalized by the default normalizer;</li><li>If the value is an object, it returns the result of calling the <code>normalize()</code> method of the object, if the object has such a method;</li><li>Otherwise, it returns the value itself.</li></ul><p>Currently, the following JavaScript build-in collection types are supported:</p><ul><li><code>Array</code>, <code>Int8Array</code>, <code>Uint8Array</code>, <code>Uint8ClampedArray</code>, <code>Int16Array</code>, <code>Uint16Array</code>, <code>Int32Array</code>, <code>Uint32Array</code>, <code>Float32Array</code>, <code>Float64Array</code>, <code>BigInt64Array</code>, <code>BigUint64Array</code>: the normalization function will be called to normalize each element in the collection.</li><li><code>Set</code>, <code>WeakSet</code>: the normalization function will be called to normalize each entry in the set.</li><li><code>Map</code>, <code>WeakMap</code>: the normalization function will be called to normalize each value in the map.</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>The value to be normalized.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The normalized value.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="stringifyId"><span class="type-signature"></span>stringifyId<span class="signature">(id)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Convert an id to a string.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>id</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">number</span> |<wbr> <span class="param-type">bigint</span></td><td class="description last"><p>The id to be converted.</p></td></tr></tbody></table></div><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>The string representation of the id, or an empty string if the id is <code>null</code> or <code>undefined</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toJSON"><span class="type-signature"></span>toJSON<span class="signature">(value, options)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Converts an object to the object to be serialized by <code>JSON.stringify()</code>.</p><p>If the value has a <code>toJSON()</code> method, it's responsible to define what data will be serialized. Instead of the object being serialized, the value returned by the <code>toJSON()</code> method when called will be serialized.</p><p><strong>NOTE:</strong> this function returns an object to be serialized by <code>JSON.stringify()</code>, instead of a JSON string. Use <code>JSON.stringify()</code> or <code>this.toJsonString()</code> methods to serialize this object into a JSON string.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="description last"><p>the value to be serialized.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the additional options for the serialization. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('toJSON')</code>. Available options are:</p><pre><code>- `normalize: boolean`, indicates whether to normalize this object
146
146
  before serializing. The default value is `true`.
147
147
  - `removeEmptyFields: boolean`, indicates whether to ignore the empty
148
148
  fields of the object. If it is `true`, the empty fields of the object
@@ -169,7 +169,7 @@ function validateIntegerField(value, context) {
169
169
  (can be either a primitive or a wrapper object) — for example, is
170
170
  `null` or not provided — no white space is used. The default value
171
171
  of this option is `null`.
172
- </code></pre></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('toJSON')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the plain old JavaScript object to be serialized by <code>JSON.stringify()</code>.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="toJsonString"><span class="type-signature"></span>toJsonString<span class="signature">(obj, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Serializes the specified into a JSON string.</p><p><strong>NOTE:</strong> This method supports native <code>bigint</code> value. For example, the <code>bigint</code> value <code>9223372036854775807n</code> will be stringify as <code>9223372036854775807</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the object to be serialized.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the additional options for the serialization. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('toJSON')</code>. Available options are:</p><pre><code>- `normalize: boolean`, indicates whether to normalize this object
172
+ </code></pre></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('toJSON')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the plain old JavaScript object to be serialized by <code>JSON.stringify()</code>.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="toJsonString"><span class="type-signature"></span>toJsonString<span class="signature">(obj, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Serializes the specified into a JSON string.</p><p><strong>NOTE:</strong> This method supports native <code>bigint</code> value. For example, the <code>bigint</code> value <code>9223372036854775807n</code> will be stringify as <code>9223372036854775807</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>参数:</strong><table class="params"><thead><tr><th>名称</th><th>类型</th><th class="last">描述</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>the object to be serialized.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">undefined</span> |<wbr> <span class="param-type">object</span></td><td class="description last"><p>the additional options for the serialization. If this argument is <code>undefined</code> or <code>null</code>, the default options will be used. The default options can be retrieved by calling <code>DefaultOptions.get('toJSON')</code>. Available options are:</p><pre><code>- `normalize: boolean`, indicates whether to normalize this object
173
173
  before serializing. The default value is `true`.
174
174
  - `removeEmptyFields: boolean`, indicates whether to ignore the empty
175
175
  fields of the object. If it is `true`, the empty fields of the object
@@ -196,4 +196,4 @@ function validateIntegerField(value, context) {
196
196
  (can be either a primitive or a wrapper object) — for example, is
197
197
  `null` or not provided — no white space is used. The default value
198
198
  of this option is `null`.
199
- </code></pre></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">Author</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>DefaultOptions.get('toJSON')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>the JSON string serialized from this object, as <code>JSON.stringify()</code> does, except that this function provides additional stringification options.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-namespaces"><div>Namespaces</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
199
+ </code></pre></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-author bold">作者</dt><dd class="tag-author"><ul><li>Haixing Hu</li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">参见</dt><dd class="tag-see"><ul><li>DefaultOptions.get('toJSON')</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>返回值:</strong><div class="param-desc"><p>the JSON string serialized from this object, as <code>JSON.stringify()</code> does, except that this function provides additional stringification options.</p></div><dl class="param-type"><dt>类型:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="关闭搜索"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="搜索..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">输入任何内容查看搜索结果</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title"><a href="index.html" class="sidebar-home-anchor">首页</a></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-类"><div>类</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="DefaultAssignmentOptions.html">DefaultAssignmentOptions</a></div><div class="sidebar-section-children"><a href="DefaultOptions.html">DefaultOptions</a></div><div class="sidebar-section-children"><a href="DefaultToJsonOptions.html">DefaultToJsonOptions</a></div><div class="sidebar-section-children"><a href="Page.html">Page</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-命名空间"><div>命名空间</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Enum.html">Enum</a></div><div class="sidebar-section-children"><a href="Model.html">Model</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-全局"><div>全局</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#ElementType">ElementType</a></div><div class="sidebar-section-children"><a href="global.html#Label">Label</a></div><div class="sidebar-section-children"><a href="global.html#NameField">NameField</a></div><div class="sidebar-section-children"><a href="global.html#NonEmpty">NonEmpty</a></div><div class="sidebar-section-children"><a href="global.html#Normalizable">Normalizable</a></div><div class="sidebar-section-children"><a href="global.html#Nullable">Nullable</a></div><div class="sidebar-section-children"><a href="global.html#Readonly">Readonly</a></div><div class="sidebar-section-children"><a href="global.html#Timeout">Timeout</a></div><div class="sidebar-section-children"><a href="global.html#Type">Type</a></div><div class="sidebar-section-children"><a href="global.html#Validatable">Validatable</a></div><div class="sidebar-section-children"><a href="global.html#assign">assign</a></div><div class="sidebar-section-children"><a href="global.html#create">create</a></div><div class="sidebar-section-children"><a href="global.html#createArray">createArray</a></div><div class="sidebar-section-children"><a href="global.html#createDeferredReadonlyInitializer">createDeferredReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createImmediateReadonlyInitializer">createImmediateReadonlyInitializer</a></div><div class="sidebar-section-children"><a href="global.html#createPage">createPage</a></div><div class="sidebar-section-children"><a href="global.html#defaultNormalizer">defaultNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#defaultValidator">defaultValidator</a></div><div class="sidebar-section-children"><a href="global.html#enumNormalizer">enumNormalizer</a></div><div class="sidebar-section-children"><a href="global.html#getDefaultInstance">getDefaultInstance</a></div><div class="sidebar-section-children"><a href="global.html#getFieldElementType">getFieldElementType</a></div><div class="sidebar-section-children"><a href="global.html#getFieldType">getFieldType</a></div><div class="sidebar-section-children"><a href="global.html#getSourceField">getSourceField</a></div><div class="sidebar-section-children"><a href="global.html#hasOwnProperty">hasOwnProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasProperty">hasProperty</a></div><div class="sidebar-section-children"><a href="global.html#hasPrototypeFunction">hasPrototypeFunction</a></div><div class="sidebar-section-children"><a href="global.html#isEnumClass">isEnumClass</a></div><div class="sidebar-section-children"><a href="global.html#isEnumerator">isEnumerator</a></div><div class="sidebar-section-children"><a href="global.html#isValidPageSource">isValidPageSource</a></div><div class="sidebar-section-children"><a href="global.html#normalize">normalize</a></div><div class="sidebar-section-children"><a href="global.html#stringifyId">stringifyId</a></div><div class="sidebar-section-children"><a href="global.html#toJSON">toJSON</a></div><div class="sidebar-section-children"><a href="global.html#toJsonString">toJsonString</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button home-button" aria-label="go-to-homepage"><svg><use xlink:href="#home-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script><script>document.addEventListener("DOMContentLoaded",(function(){"undefined"!=typeof tippy&&(tippy(".home-button",{content:"回到首页",delay:500}),tippy(".theme-toggle",{content:"切换主题",delay:500}),tippy(".search-button",{content:"搜索",delay:500}),tippy(".font-size",{content:"更改字体大小",delay:500}))}))</script></body></html>