Vyhledávání na webu

TypeScript - duplicitní identifikátor


Ve svém kódu v TypeScript 2.0 (ve Visual Studio 2015) mám:

var lang = navigator.language 
         ? navigator.language 
         : navigator.systemLanguage;

S tímto dostanu tuto chybu:

Build:Property 'systemLanguage' does not exist on type 'Navigator'.

Pokud však toto přidám do jednoho z mých souborů d.ts:

interface Navigator {
  systemLanguage: string;
}

Pak dostanu:

TS2300  Duplicate identifier 'systemLanguage'.

Jak prolomit tuto slepou uličku v TypeScriptu?

Odpověď č. 1

Z vaší otázky usuzuji, že navigator je proměnná typu Navigator. Z první chyby, kterou jste uvedl, bych odhadoval, že problém je buď (1) v tom, že rozhraní Navigator nemá vlastnost nazvanou systemLanguage, nebo (2) že ve svém kódu nespecifikujete, že navigator je typu Navigator. Z druhé chyby, kterou jste uvedl, jsem si docela jistý, že váš problém je způsoben bodem (2).

Protože Typescript kompiluje všechny soubory .ts, když přidáte rozhraní Navigator s vlastností systemLanguage, zjistí, že již existuje jiné rozhraní se stejným názvem a stejnou vlastností, a proto vzniká druhá chyba.

Myslím, že co potřebujete udělat je (1) najít, kde je definován Navigation, (2) importovat tuto definici do souboru, který obsahuje kód, na který se odkazujete jako první, a (3) napsat navigator jako typu Navigator.

UPRAVA: Zde je příklad:

// your-code-file.ts
import Navigator from './path-to-code-file-with-navigator/navigator.ts'

...

let navigator:Navigator = ...;

...

var lang = navigator.language 
         ? navigator.language 
         : navigator.systemLanguage;


// navigator.ts
interface Navigator {
    language: string;
    systemLanguage: string;
}

Odpověď č. 2

Navigator je definován v lib.d.ts. systemLanguage již není vlastností rozhraní Navigator. Zkontrolujte zde https://github.com/Microsoft/TypeScript/blob/master/lib/lib.d.ts

Vypadá to, že commit provedený 11. dubna 2016 odstraňuje systemLanguage.