mirror of
https://github.com/swc-project/swc.git
synced 2024-12-18 11:11:30 +03:00
57 lines
1.0 KiB
TypeScript
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()
|
|
|