@@ -1880,3 +1880,86 @@ class Form<T> {
18801880 }
18811881}
18821882
1883+ // Repro from #13787
1884+
1885+ class SampleClass<P> {
1886+ >SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 526, 1))
1887+ >P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 530, 18))
1888+
1889+ public props: Readonly<P>;
1890+ >props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 530, 22))
1891+ >Readonly : Symbol(Readonly, Decl(lib.d.ts, --, --))
1892+ >P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 530, 18))
1893+
1894+ constructor(props: P) {
1895+ >props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 532, 16))
1896+ >P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 530, 18))
1897+
1898+ this.props = Object.freeze(props);
1899+ >this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 530, 22))
1900+ >this : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 526, 1))
1901+ >props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 530, 22))
1902+ >Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1903+ >Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1904+ >freeze : Symbol(ObjectConstructor.freeze, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
1905+ >props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 532, 16))
1906+ }
1907+ }
1908+
1909+ interface Foo {
1910+ >Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 535, 1))
1911+
1912+ foo: string;
1913+ >foo : Symbol(Foo.foo, Decl(keyofAndIndexedAccess.ts, 537, 15))
1914+ }
1915+
1916+ declare function merge<T, U>(obj1: T, obj2: U): T & U;
1917+ >merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 539, 1))
1918+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 541, 23))
1919+ >U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 541, 25))
1920+ >obj1 : Symbol(obj1, Decl(keyofAndIndexedAccess.ts, 541, 29))
1921+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 541, 23))
1922+ >obj2 : Symbol(obj2, Decl(keyofAndIndexedAccess.ts, 541, 37))
1923+ >U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 541, 25))
1924+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 541, 23))
1925+ >U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 541, 25))
1926+
1927+ class AnotherSampleClass<T> extends SampleClass<T & Foo> {
1928+ >AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 541, 54))
1929+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 543, 25))
1930+ >SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 526, 1))
1931+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 543, 25))
1932+ >Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 535, 1))
1933+
1934+ constructor(props: T) {
1935+ >props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 544, 16))
1936+ >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 543, 25))
1937+
1938+ const foo: Foo = { foo: "bar" };
1939+ >foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 545, 13))
1940+ >Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 535, 1))
1941+ >foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 545, 26))
1942+
1943+ super(merge(props, foo));
1944+ >super : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 526, 1))
1945+ >merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 539, 1))
1946+ >props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 544, 16))
1947+ >foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 545, 13))
1948+ }
1949+
1950+ public brokenMethod() {
1951+ >brokenMethod : Symbol(AnotherSampleClass.brokenMethod, Decl(keyofAndIndexedAccess.ts, 547, 5))
1952+
1953+ this.props.foo.concat;
1954+ >this.props.foo.concat : Symbol(String.concat, Decl(lib.d.ts, --, --))
1955+ >this.props.foo : Symbol(foo)
1956+ >this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 530, 22))
1957+ >this : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 541, 54))
1958+ >props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 530, 22))
1959+ >foo : Symbol(foo)
1960+ >concat : Symbol(String.concat, Decl(lib.d.ts, --, --))
1961+ }
1962+ }
1963+ new AnotherSampleClass({});
1964+ >AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 541, 54))
1965+
0 commit comments