//// [tests/cases/compiler/conflictingTypeParameterSymbolTransfer.ts] ////

//// [conflictingTypeParameterSymbolTransfer.ts]
// @strict

// Via #56620
class Base<U> { }
export class C2<T> extends Base<unknown> {
    T: number;
    constructor(T: number) {
        super();
        // Should not error
        this.T = T;

        // Should error
        let a: U = null;
    }
}

// via #56689
class Leg { }
class Foo<t> extends Leg {
    t = {} as t

    // should allow this access since t was declared as a property on Foo
    foo = this.t
}

// via #56661
class BaseClass { }
class Item<data> extends BaseClass {
    data: data;
    getData() {
        // should OK
        return this.data;
    }
}

//// [conflictingTypeParameterSymbolTransfer.js]
// @strict
// Via #56620
class Base {
}
export class C2 extends Base {
    constructor(T) {
        super();
        // Should not error
        this.T = T;
        // Should error
        let a = null;
    }
}
// via #56689
class Leg {
}
class Foo extends Leg {
    constructor() {
        super(...arguments);
        this.t = {};
        // should allow this access since t was declared as a property on Foo
        this.foo = this.t;
    }
}
// via #56661
class BaseClass {
}
class Item extends BaseClass {
    getData() {
        // should OK
        return this.data;
    }
}
