para one kav60 instalar d257 controladores como camara aspire acer javascript typescript types promise

javascript - one - ¿Por qué mecanografia utiliza tipos "Me gusta"?



driver acer para windows 7 (1)

¿Por qué mecanografia tiene un tipo y luego un "tipo similar"? Un ejemplo de esto es Promise<T> y PromiseLike<T> . ¿Cuáles son las diferencias entre estos dos tipos? ¿Cuándo debo usarlos? En este caso, ¿por qué no tener un solo tipo de Promise ?


Si nos fijamos en los archivos de definición (tomemos lib.es6.d.ts ), es bastante sencillo.

Por ejemplo, la interfaz ArrayLike :

interface ArrayLike<T> { readonly length: number; readonly [n: number]: T; }

es más limitado que el Array :

interface Array<T> { length: number; toString(): string; toLocaleString(): string; push(...items: T[]): number; pop(): T | undefined; concat(...items: T[][]): T[]; concat(...items: (T | T[])[]): T[]; join(separator?: string): string; reverse(): T[]; shift(): T | undefined; slice(start?: number, end?: number): T[]; sort(compareFn?: (a: T, b: T) => number): this; splice(start: number, deleteCount?: number): T[]; splice(start: number, deleteCount: number, ...items: T[]): T[]; unshift(...items: T[]): number; indexOf(searchElement: T, fromIndex?: number): number; lastIndexOf(searchElement: T, fromIndex?: number): number; // lots of other methods such as every, forEach, map, etc [n: number]: T; }

Es bueno tener los dos separados porque podría querer tener una función como esta:

function getSize(arr: Array<any>): number { return arr.length; } console.log(getSize([1, 2, 3])); // works

Pero no funcionará con esto:

function fn() { console.log(getSize(arguments)); // error }

Resulta con este error:

El argumento del tipo ''IArguments'' no se puede asignar al parámetro de tipo ''any []''.
Falta la propiedad ''push'' en el tipo ''IArguments''.

Pero ambos funcionarán si hago esto:

function getSize(arr: ArrayLike<any>): number { return arr.length; }

(más sobre ArrayLike en MDN )

Lo mismo PromiseLike con Promise y PromiseLike , si estoy construyendo una biblioteca que no tiene opiniones acerca de la implementación de Promise , en lugar de hacer esto:

function doSomething(promise: Promise<any>) { ... }

Haré esto

function doSomething(promise: PromiseLike<any>) { ... }

Entonces, incluso si el usuario de mi biblioteca está utilizando una implementación diferente (bluebird), funcionará bien.

Si te das cuenta la definición de Promise es esta:

declare var Promise: PromiseConstructor;

Lo que lo hace muy específico, otras implementaciones pueden tener diferentes propiedades, por ejemplo, un prototipo diferente:

interface PromiseConstructor { readonly prototype: Promise<any>; ... }

Supongo que la razón principal por la que tenemos PromiseLike es que varias implementaciones estaban disponibles antes de que se PromiseLike nativa (como bluebird , Promises/A+ , jQuery , y más).
Para que mecanografíe para trabajar con las bases de código que están utilizando esas implementaciones, debe haber un tipo que no sea Promise , de lo contrario habría muchas contradicciones.