Fix types of entries argument & _prelimContent
This commit is contained in:
parent
e9a8af86e5
commit
ea3f171876
@ -22,6 +22,18 @@ import * as iterator from 'lib0/iterator'
|
|||||||
/**
|
/**
|
||||||
* @template T
|
* @template T
|
||||||
* @typedef {Extract<keyof T, string>} StringKey<T>
|
* @typedef {Extract<keyof T, string>} StringKey<T>
|
||||||
|
*
|
||||||
|
* Like keyof, but guarantees the returned type is a subset of string.
|
||||||
|
* `keyof` will include number and Symbol even if the input type requires string keys.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template T
|
||||||
|
* @typedef {readonly {
|
||||||
|
* [K in keyof T]: [K, T[K]];
|
||||||
|
* }[StringKey<T>][]} EntriesOf<T>
|
||||||
|
*
|
||||||
|
* Converts an object schema into a readonly array containing valid key-value pairs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,12 +71,12 @@ export class YMapEvent extends YEvent {
|
|||||||
export class YMap extends AbstractType {
|
export class YMap extends AbstractType {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {Iterable<readonly [string, any]>=} entries - an optional iterable to initialize the YMap
|
* @param {EntriesOf<MapType>=} entries - an optional iterable to initialize the YMap
|
||||||
*/
|
*/
|
||||||
constructor (entries) {
|
constructor (entries) {
|
||||||
super()
|
super()
|
||||||
/**
|
/**
|
||||||
* @type {Map<string,any>?}
|
* @type {Map<StringKey<MapType>, MapType[StringKey<MapType>]>?}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this._prelimContent = null
|
this._prelimContent = null
|
||||||
@ -88,9 +100,8 @@ export class YMap extends AbstractType {
|
|||||||
*/
|
*/
|
||||||
_integrate (y, item) {
|
_integrate (y, item) {
|
||||||
super._integrate(y, item)
|
super._integrate(y, item)
|
||||||
;/** @type {Map<string, any>} */ (this._prelimContent).forEach((value, key) => {
|
this._prelimContent?.forEach((value, key) => {
|
||||||
// TODO: fix
|
this.set(key, value)
|
||||||
this.set(/** @type {any} */ (key), value)
|
|
||||||
})
|
})
|
||||||
this._prelimContent = null
|
this._prelimContent = null
|
||||||
}
|
}
|
||||||
@ -111,8 +122,7 @@ export class YMap extends AbstractType {
|
|||||||
*/
|
*/
|
||||||
const map = new YMap()
|
const map = new YMap()
|
||||||
this.forEach((value, key) => {
|
this.forEach((value, key) => {
|
||||||
// TODO: fix
|
map.set(key, value instanceof AbstractType ? /** @type {typeof value} */ (value.clone()) : value)
|
||||||
map.set(key, /** @type {any} */ (value instanceof AbstractType ? /** @type {typeof value} */ (value.clone()) : value))
|
|
||||||
})
|
})
|
||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
@ -185,7 +195,7 @@ export class YMap extends AbstractType {
|
|||||||
/**
|
/**
|
||||||
* Executes a provided function on once on every key-value pair.
|
* Executes a provided function on once on every key-value pair.
|
||||||
*
|
*
|
||||||
* @param {function(MapType[keyof MapType],StringKey<MapType>,YMap<MapType>):void} f A function to execute on every element of this YArray.
|
* @param {function(MapType[StringKey<MapType>],StringKey<MapType>,YMap<MapType>):void} f A function to execute on every element of this YArray.
|
||||||
*/
|
*/
|
||||||
forEach (f) {
|
forEach (f) {
|
||||||
this._map.forEach((item, key) => {
|
this._map.forEach((item, key) => {
|
||||||
@ -207,7 +217,6 @@ export class YMap extends AbstractType {
|
|||||||
/**
|
/**
|
||||||
* Remove a specified element from this YMap.
|
* Remove a specified element from this YMap.
|
||||||
*
|
*
|
||||||
* TODO: type to only allow deletion of optional elements in MapType
|
|
||||||
* @param {string} key The key of the element to remove.
|
* @param {string} key The key of the element to remove.
|
||||||
*/
|
*/
|
||||||
delete (key) {
|
delete (key) {
|
||||||
@ -291,9 +300,3 @@ export class YMap extends AbstractType {
|
|||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
export const readYMap = _decoder => new YMap()
|
export const readYMap = _decoder => new YMap()
|
||||||
|
|
||||||
|
|
||||||
/** @type {YMap<{ foo: { hello: [3, 4, { hiThere: null }] }; }>} */
|
|
||||||
const foo = new YMap();
|
|
||||||
|
|
||||||
foo.has("")
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user