2016-10-30 2 views
1

Mein Code ist die async Bibliothek, speziell dieser Callback-Typ (source):TypeScript strict null checks: Wie kann man Bibliothekseinschränkungen überschreiben?

interface AsyncResultCallback<T> { (err: Error, result: T): void; } 

In meinem Typoskript Code mit strictNullChecks aktiviert ist, nennt es wie dies fehlschlägt:

cb(null, someObject); 

Error:(239, 16) TS2345: Argument of type 'null' is not assignable to parameter of type 'Error'.

Jetzt

Ich bin nicht sicher, ob die Definition des Bibliothekentyps falsch ist oder nicht, aber sagen wir es so, und die Schnittstelle sollte mit err optional definiert werden, wie folgt:

interface AsyncResultCallback<T> { (err?: Error, result: T): void; } 

Was kann ich tun, Typoskript zu überzeugen vorbei null als ersten Parameter des Callback zu ermöglichen? Ich habe schon "skipLibCheck": true und "skipDefaultLibCheck": true ausprobiert aber keine Freude.

Antwort

2

Die Flags skipLibCheck und skipDefaultLibCheck werden in diesem Fall nicht helfen, da der Fehler von Ihrem Code und nicht von der Bibliothek stammt, die Sie verwenden.

Sie haben zwei Möglichkeiten (das ich mir vorstellen kann):

(1) Übergeben Sie einen Nicht-Null-Wert:

cb(new Error(), someObject); 

(2) Versuchen Sie, die Bibliothek zu erweitern:

import * as Async from "async"; 

declare global { 
    interface AsyncResultCallback<T> { 
     (err: Error | null, result: T): void; 
    } 
} 
+0

Danke, (1) ist keine Option, weil es die Logik des Codes ändert und die App brechen könnte, Option (2) funktioniert, nur nicht genau so - aber 'declare global {...' funktioniert. Option (3) besteht darin, 'cb' als' any' einzugeben, wenn es als Parameter kommt, was in meinem Fall der Fall ist. – Borek

+0

Es sollte mit 'declare module" async "' funktionieren, was auch der richtige Weg ist, da "global" "etwas anderes bedeutet". Wenn 'cb: any' verwendet wird, funktioniert es auch mit' cb: Function', aber dann haben Sie die Typensicherheit verloren. –

+0

'deklarieren Modul" async "' gibt mir "TS2671: Modul kann 'async' nicht erweitert werden, da es in eine Nicht-Modul-Entität aufgelöst wird.". Möglicherweise verwandt: https://github.com/Microsoft/TypeScript/issues/7148 – Borek

Verwandte Themen