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
 | 
			
		||||
 * @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 {
 | 
			
		||||
  /**
 | 
			
		||||
   *
 | 
			
		||||
   * @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) {
 | 
			
		||||
    super()
 | 
			
		||||
    /**
 | 
			
		||||
     * @type {Map<string,any>?}
 | 
			
		||||
     * @type {Map<StringKey<MapType>, MapType[StringKey<MapType>]>?}
 | 
			
		||||
     * @private
 | 
			
		||||
     */
 | 
			
		||||
    this._prelimContent = null
 | 
			
		||||
@ -88,9 +100,8 @@ export class YMap extends AbstractType {
 | 
			
		||||
   */
 | 
			
		||||
  _integrate (y, item) {
 | 
			
		||||
    super._integrate(y, item)
 | 
			
		||||
    ;/** @type {Map<string, any>} */ (this._prelimContent).forEach((value, key) => {
 | 
			
		||||
      // TODO: fix
 | 
			
		||||
      this.set(/** @type {any} */ (key), value)
 | 
			
		||||
    this._prelimContent?.forEach((value, key) => {
 | 
			
		||||
      this.set(key, value)
 | 
			
		||||
    })
 | 
			
		||||
    this._prelimContent = null
 | 
			
		||||
  }
 | 
			
		||||
@ -111,8 +122,7 @@ export class YMap extends AbstractType {
 | 
			
		||||
     */
 | 
			
		||||
    const map = new YMap()
 | 
			
		||||
    this.forEach((value, key) => {
 | 
			
		||||
      // TODO: fix
 | 
			
		||||
      map.set(key, /** @type {any} */ (value instanceof AbstractType ? /** @type {typeof value} */ (value.clone()) : value))
 | 
			
		||||
      map.set(key, value instanceof AbstractType ? /** @type {typeof value} */ (value.clone()) : value)
 | 
			
		||||
    })
 | 
			
		||||
    return map
 | 
			
		||||
  }
 | 
			
		||||
@ -185,7 +195,7 @@ export class YMap extends AbstractType {
 | 
			
		||||
  /**
 | 
			
		||||
   * 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) {
 | 
			
		||||
    this._map.forEach((item, key) => {
 | 
			
		||||
@ -207,7 +217,6 @@ export class YMap extends AbstractType {
 | 
			
		||||
  /**
 | 
			
		||||
   * 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.
 | 
			
		||||
   */
 | 
			
		||||
  delete (key) {
 | 
			
		||||
@ -291,9 +300,3 @@ export class YMap extends AbstractType {
 | 
			
		||||
 * @function
 | 
			
		||||
 */
 | 
			
		||||
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