2015-12-29 6 views
10

ich mit meiner Funktion ein Problem habe:Typoskript: Index Unterschrift des Objekttypen hat implizit einen ‚beliebigen‘ Typen

copyObject<T> (object:T):T { 
     var objectCopy = <T>{}; 
     for (var key in object) { 
      if (object.hasOwnProperty(key)) { 
       objectCopy[key] = object[key]; 
      } 
     } 
     return objectCopy; 
    } 

Und ich habe folgende Fehlermeldung:

Index signature of object type implicitly has an 'any' type. 

Wie kann ich das beheben es?

+0

Ich denke, es ist wegen der 'var-Taste in Objekt' und die Verwendung von' key' danach. Können Sie versuchen, die Kompilierung mit 'noImplicitAny = false' zu ​​starten, um dies zu bestätigen? – FlorianTopf

Antwort

12
class test<T> { 
    copyObject<T> (object:T):T { 
     var objectCopy = <T>{}; 
     for (var key in object) { 
      if (object.hasOwnProperty(key)) { 
       objectCopy[key] = object[key]; 
      } 
     } 
     return objectCopy; 
    } 
} 

Wenn ich den Code ausführen wie folgt

c:\Work\TypeScript>tsc hello.ts 

es OK funktioniert. Doch die folgenden Code ein:

c:\Work\TypeScript>tsc --noImplicitAny hello.ts 

wirft

hello.ts(6,17): error TS7017: Index signature of object type implicitly has an 'any' type. 
hello.ts(6,35): error TS7017: Index signature of object type implicitly has an 'any' type. 

Also, wenn Sie noImplicitAny Flag zu deaktivieren, wird es funktionieren.

Es scheint auch eine andere Option zu sein, weil tsc das folgende Flag unterstützt:

--suppressImplicitAnyIndexErrors Suppress noImplicitAny errors for indexing objects lacking index signatures. 

Dies funktioniert für mich auch:

tsc --noImplicitAny --suppressImplicitAnyIndexErrors hello.ts 

Update:

class test<T> { 
    copyObject<T> (object:T):T { 
     let objectCopy:any = <T>{}; 
     let objectSource:any = object; 
     for (var key in objectSource) { 
      if (objectSource.hasOwnProperty(key)) { 
       objectCopy[key] = objectSource[key]; 
      } 
     } 
     return objectCopy; 
    } 
} 

Dieser Code funktioniert ohne Änderung der Kompilierung Er Fahnen.

+1

Das funktioniert super! Vielen Dank! – uksz

+4

Hallo Martin, große Antwort auf die Frage, ich habe mich nur gefragt, ob Sie (oder jemand anderes) wissen, warum das funktioniert, oder warum wir die lokalen Variablen objectCopy und objectSource definieren müssen? –

Verwandte Themen