Nouveau type 1.8.4 erreur de compilation: "Build: Property' result 'n'existe pas sur le type'EventTarget'. "
je suis nouveau à dactylographier. Dans mon application Durandal j'ai migré à VS-2012 à VS-2015 signifie tapescript 0.9 à typescript 1.8.4. Après avoir migré j'ai eu tellement d'erreurs de compilation. J'ai résolu tous ceux sauf un. J'obtiens ci-dessous build error sur les types d'événements.
message d'ERREUR: "Construire: la Propriété 'résultat' n'existe pas sur le type "EventTarget' "
Et le code est exactement comme ci-dessous:
var reader:any,
target:EventTarget;
reader= new FileReader();
reader.onload = function (imgsrc){
var fileUrl = imgsrc.target.result;
}
"Imgsrc" prend type événement.
il fonctionne très bien avec typescript 0.9 mais avec 1.8.4 il lance une erreur car 'result' n'existe pas sur le type 'EventTarget'. Quelqu'un peut-il aider à résoudre.
Remarque: "la cible:EventTarget" est l'obtention de lib.d.ts
6 réponses
any
est un médicament (presque pour n'importe quoi, mais... où est L'avantage de dactylographier alors)... il y a un problème similaire rapporté et nice (TypesScript-ish) solution de contournement proposé
Demande de changement de currentTarget dans l'interface d'Événement pour lib.d.ts
permettez-moi de citer:
J'ai trouvé ce TS2339: la propriété 'result' n'existe pas sur type "EventTarget" dans JS FileReader onload, et un autre avertissement pour getSummary() sur l'événement passé à FileReader de onerror.
mon travail autour, pour supprimer les lignes grises rouges horribles; -) est le suivantes:
interface FileReaderEventTarget extends EventTarget { result:string } interface FileReaderEvent extends Event { target: FileReaderEventTarget; getMessage():string; }
Puis dans mon application:
reader.onload = function(fre:FileReaderEvent) { var data = JSON.parse(fre.target.result); ... }
et, jusqu'à un certain changement de lib.d.ts, nous continuons de travailler avec une interface connue
avec mon ancien script de type le paramètre "imgsrc" a n'importe quel type par défaut.
donc, maintenant je l'ai fait comme (imgsrc: any). Ça fonctionne très bien.
var reader:any,
target:EventTarget;
reader= new FileReader();
reader.onload = function (imgsrc:any){
var fileUrl = imgsrc.target.result;
}
au Lieu d'utiliser event.target.result
, vous pouvez simplement utiliser FileReader.result
.
Par exemple,
const fileReader: FileReader = new FileReader();
fileReader.onload = (event: Event) => {
event.target.result; // This is invalid
fileReader.result; // This is valid
};
le problème est avec Le tapuscrit définitions. Un simple tricheur est:
let target: any = e.target; //<-- This (any) will tell compiler to shut up!
let content: string = target.result;
Aujourd'hui cela a fonctionné pour moi à la typographie 2.1.1
interface EventTarget { result: any; }
il s'agit d'un changement radical de javascript/typescript.
ce que vous devez faire est de simplement remplacer "de l'événement.cible.suite" par "ce.résultat."
"ce" désigne ici le contexte de l'interface "MSBaseReader".
ci-dessous sont mes mise en œuvre de l'extrait:
let reader = new FileReader();
let profile: TransProfile = new TransProfile();
reader.onload = function(event){
profile.avatar = new Uint8Array(this.result);
}
reader.onerror = function(event){
}
this.photoLib.getPhoto(item)
.then(blob => reader.readAsArrayBuffer(blob))
.then(() => this.doUpload(profile));
"MSBaseReader" interface définition:
interface MSBaseReader {
onabort: (this: MSBaseReader, ev: Event) => any;
onerror: (this: MSBaseReader, ev: ErrorEvent) => any;
onload: (this: MSBaseReader, ev: Event) => any;
onloadend: (this: MSBaseReader, ev: ProgressEvent) => any;
onloadstart: (this: MSBaseReader, ev: Event) => any;
onprogress: (this: MSBaseReader, ev: ProgressEvent) => any;
readonly readyState: number;
readonly result: any;
abort(): void;
readonly DONE: number;
readonly EMPTY: number;
readonly LOADING: number;
addEventListener<K extends keyof MSBaseReaderEventMap>(type: K, listener: (this: MSBaseReader, ev: MSBaseReaderEventMap[K]) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
}
interface"FileReader" définition
interface FileReader extends EventTarget, MSBaseReader {
readonly error: DOMError;
readAsArrayBuffer(blob: Blob): void;
readAsBinaryString(blob: Blob): void;
readAsDataURL(blob: Blob): void;
readAsText(blob: Blob, encoding?: string): void;
addEventListener<K extends keyof MSBaseReaderEventMap>(type: K, listener: (this: FileReader, ev: MSBaseReaderEventMap[K]) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
}
notez également que, en raison du changement de contexte de "ce" dans " onload ()", vos définitions basées sur la classe ne sont pas accessibles dans " reader.onload = function (event){..."; ce qui signifie que vous ne pouvez pas utiliser".catégorie de la propriété" style pour répondre à vos propriétés de la classe.
vous devez définir la variable locale. voir la définition et l'utilisation de "profil" dans l'extrait ci-dessus.