2015-12-29 17 views
10

Mam problem z mojej funkcji:maszynopis: Index podpis typu obiektu domyśle ma 'any' typ

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

I mam następujący błąd:

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

Jak mogę naprawić to?

+0

Myślę, że dzieje się tak z powodu 'klucza var w obiekcie' i użycia' klucza' później. Czy możesz spróbować uruchomić kompilację za pomocą 'noImplicitAny = false', aby potwierdzić? – FlorianTopf

Odpowiedz

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; 
    } 
} 

Jeśli uruchomić kod następująco

c:\Work\TypeScript>tsc hello.ts 

to działa OK. Jednak poniższy kod:

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

rzuca

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. 

Więc jeśli wyłączyć noImplicitAny flagę, to będzie działać.

Nie wydaje się być innej opcji, jak również dlatego tsc obsługuje następujące flagi:

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

Działa to dla mnie zbyt:

tsc --noImplicitAny --suppressImplicitAnyIndexErrors hello.ts 

Aktualizacja:

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; 
    } 
} 

Ten kod działa bez zmiany jakiejkolwiek kompilacji flagi er.

+1

Działa to świetnie! Dzięki! – uksz

+4

Witaj Martin, świetna odpowiedź na pytanie, zastanawiałem się tylko, czy ty (lub ktokolwiek inny) wiesz, dlaczego to działa, lub dlaczego musimy zdefiniować lokalne obiekty objectCopy i zmienne objectSource? –

Powiązane problemy