@@ -1742,6 +1742,178 @@ ruleTester.run(
17421742 { messageId : 'throwTypeMismatch' } ,
17431743 ] ,
17441744 } ,
1745+ {
1746+ code : `
1747+ class TrueGetterError extends Error {}
1748+ class TrueSetterError extends Error {}
1749+ class FalseGetterError extends Error {}
1750+ class FalseSetterError extends Error {}
1751+
1752+ function foo() {
1753+ if (Math.random() > 0.5) {
1754+ return {
1755+ flag: true,
1756+ /**
1757+ * @throws {TrueGetterError}
1758+ */
1759+ get value() {
1760+ throw new TrueGetterError();
1761+ },
1762+ /**
1763+ * @throws {TrueSetterError}
1764+ */
1765+ set value(v: any) {
1766+ throw new TrueSetterError();
1767+ },
1768+ } as const;
1769+ } else {
1770+ return {
1771+ flag: false,
1772+ /**
1773+ * @throws {FalseGetterError}
1774+ */
1775+ get value() {
1776+ throw new FalseGetterError();
1777+ },
1778+ /**
1779+ * @throws {FalseSetterError}
1780+ */
1781+ set value(v: any) {
1782+ throw new FalseSetterError();
1783+ },
1784+ } as const;
1785+ }
1786+ }
1787+
1788+ /**
1789+ * @throws {TrueGetterError}
1790+ */
1791+ function bar() {
1792+ const result = foo();
1793+ if (!result.flag) {
1794+ result.value;
1795+ }
1796+ }
1797+
1798+ /**
1799+ * @throws {FalseGetterError}
1800+ */
1801+ function baz() {
1802+ const result = foo();
1803+ if (result.flag) {
1804+ result.value;
1805+ }
1806+ }
1807+
1808+ /**
1809+ * @throws {TrueSetterError}
1810+ */
1811+ function qux() {
1812+ const result = foo();
1813+ if (!result.flag) {
1814+ result.value = 42;
1815+ }
1816+ }
1817+
1818+ /**
1819+ * @throws {FalseSetterError}
1820+ */
1821+ function quux() {
1822+ const result = foo();
1823+ if (result.flag) {
1824+ result.value = 42;
1825+ }
1826+ }
1827+ ` ,
1828+ output : `
1829+ class TrueGetterError extends Error {}
1830+ class TrueSetterError extends Error {}
1831+ class FalseGetterError extends Error {}
1832+ class FalseSetterError extends Error {}
1833+
1834+ function foo() {
1835+ if (Math.random() > 0.5) {
1836+ return {
1837+ flag: true,
1838+ /**
1839+ * @throws {TrueGetterError}
1840+ */
1841+ get value() {
1842+ throw new TrueGetterError();
1843+ },
1844+ /**
1845+ * @throws {TrueSetterError}
1846+ */
1847+ set value(v: any) {
1848+ throw new TrueSetterError();
1849+ },
1850+ } as const;
1851+ } else {
1852+ return {
1853+ flag: false,
1854+ /**
1855+ * @throws {FalseGetterError}
1856+ */
1857+ get value() {
1858+ throw new FalseGetterError();
1859+ },
1860+ /**
1861+ * @throws {FalseSetterError}
1862+ */
1863+ set value(v: any) {
1864+ throw new FalseSetterError();
1865+ },
1866+ } as const;
1867+ }
1868+ }
1869+
1870+ /**
1871+ * @throws {FalseGetterError}
1872+ */
1873+ function bar() {
1874+ const result = foo();
1875+ if (!result.flag) {
1876+ result.value;
1877+ }
1878+ }
1879+
1880+ /**
1881+ * @throws {TrueGetterError}
1882+ */
1883+ function baz() {
1884+ const result = foo();
1885+ if (result.flag) {
1886+ result.value;
1887+ }
1888+ }
1889+
1890+ /**
1891+ * @throws {FalseSetterError}
1892+ */
1893+ function qux() {
1894+ const result = foo();
1895+ if (!result.flag) {
1896+ result.value = 42;
1897+ }
1898+ }
1899+
1900+ /**
1901+ * @throws {TrueSetterError}
1902+ */
1903+ function quux() {
1904+ const result = foo();
1905+ if (result.flag) {
1906+ result.value = 42;
1907+ }
1908+ }
1909+ ` ,
1910+ errors : [
1911+ { messageId : 'throwTypeMismatch' } ,
1912+ { messageId : 'throwTypeMismatch' } ,
1913+ { messageId : 'throwTypeMismatch' } ,
1914+ { messageId : 'throwTypeMismatch' } ,
1915+ ] ,
1916+ } ,
17451917 ] ,
17461918 } ,
17471919) ;
0 commit comments