2016-11-29 3 views
2

В моем коде машинопись 2.0 (в Visual Studio 2015), у меня есть:Машинопись - продублировать идентификатор

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

С этим, я получаю эту ошибку:

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

Однако, если добавить этот к одному из моих d.ts файлов:

interface Navigator { 
    systemLanguage: string; 
} 

Тогда я получаю:

TS2300 Duplicate identifier 'systemLanguage'. 

Как отключить этот тупик TypeScript?

+0

странный: https://www.typescriptlang.org/play/#src=interface%20Navigator%20%7B%0D%0A%20%20systemLanguage%3A%20string%3B%0D%0A%7D%0D% 0A% 0D% 0Avar% 20lang% 20% 3D% 20navigator.language% 20% 7C% 7C% 20navigator.systemLanguage% 3B% 0D% 0A% 0D% 0Aconsole.log (lang)% 3B – InferOn

+0

@Inferon, что странно " об этом? –

ответ

1

С вашего вопроса, я выводя, что navigator является переменной типа Navigator. Из первой отправленной вами ошибки я бы предположил, что проблема заключается в том, что либо (1), что интерфейс Navigator не имеет свойства systemLanguage или (2), что вы не указали, что navigator имеет тип Navigator в вашем файле кода. Из второй сделанной вами ошибки я вполне уверен, что ваша проблема вызвана проблемой (2).

Так как TypScript компилирует все .ts-файлы, когда вы добавляете интерфейс Navigator с свойством systemLanguage, он обнаруживает, что есть уже другой интерфейс с тем же именем и тем же свойством, таким образом, вторая ошибка.

Я думаю, что вам нужно сделать, это (1) найти, где Navigation определяется, (2) импортировать определение в файл, который содержит код, который вы ссылаетесь первым и (3) Тип navigator как типа Navigator.

EDIT: Вот пример:

// 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; 
} 
+0

'navigator' на самом деле' windows.navigator' во всех браузерах. –

+0

Этот код относится к текущим браузерам и Internet Explorer. IE имеет 'systemLanguage', а не' language'. –

+0

'Навигатор' определен в' lib.d.ts', поэтому я не должен его трогать. –

1

Навигатор определен в lib.d.ts. systemLanguage больше не является свойством интерфейса Navigator. Отметьте здесь https://github.com/Microsoft/TypeScript/blob/master/lib/lib.d.ts

Похоже, что совершение совершено 11 апреля 2016 года, удаляет системный язык.

+0

Он по-прежнему является частью всех браузеров Internet Explorer, поэтому мой код должен его использовать. Я согласен, что это уже не часть стандарта! –

Смежные вопросы