swc/crates/swc_ecma_parser/tests/tsc/propertiesOfGenericConstructorFunctions.ts

57 lines
1.0 KiB
TypeScript

// @Filename: propertiesOfGenericConstructorFunctions.js
// @allowJs: true
// @checkJs: true
// @noEmit: true
/**
* @template {string} K
* @template V
* @param {string} ik
* @param {V} iv
*/
function Multimap(ik, iv) {
/** @type {{ [s: string]: V }} */
this._map = {};
// without type annotation
this._map2 = { [ik]: iv };
};
/** @type {Multimap<"a" | "b", number>} with type annotation */
const map = new Multimap("a", 1);
// without type annotation
const map2 = new Multimap("m", 2);
/** @type {number} */
var n = map._map['hi']
/** @type {number} */
var n = map._map2['hi']
/** @type {number} */
var n = map2._map['hi']
/** @type {number} */
var n = map._map2['hi']
/**
* @class
* @template T
* @param {T} t
*/
function Cp(t) {
this.x = 1
this.y = t
}
Cp.prototype = {
m1() { return this.x },
m2() { this.z = this.x + 1; return this.y }
}
var cp = new Cp(1)
/** @type {number} */
var n = cp.x
/** @type {number} */
var n = cp.y
/** @type {number} */
var n = cp.m1()
/** @type {number} */
var n = cp.m2()