Как явно использовать типы lib.d.ts?

Похоже, эта проблема связана с IDE WebStorm. Я сообщил WebStorm. И отслеживайте здесь.

Я использую Angular 2 с TypeScript 2.

Как явно использовать местоположение из типов lib.d.ts? Потому что теперь он отображается красным в моей IDE WebStorm 2016.3 EAP:

const hostname = location.hostname;
const hostname = window.location.hostname;

введите здесь описание изображения


У меня есть это в моем файле:

import { Location } from '@angular/common';

constructor(private _location: Location) {}
// note there is an underline before
// and when I use in other functions, I actually use 'this._location' not just '_location'

И я обнаружил, что после удаления import { Location } from '@angular/common'; ошибка исчезнет.


И я предполагаю, что причина, по которой появляется эта ошибка, заключается в том, что IDE считает, что это location из Angular 2.

На скриншоте ниже видно, что все функции, принадлежащие Location из Angular 2.

введите здесь описание изображения


Один из способов — использовать const hostname = (location as any).hostname;, но есть ли лучший способ? Спасибо

Мой tsconfig.json, если это поможет:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "module": "commonjs",
    "removeComments": true,
    "sourceMap": true,
    "lib": ["es6", "dom"]
  },
  "include": [
    "node_modules/@types/**/*.d.ts",
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules",
    "!node_modules/@types/**/*.d.ts"
  ],
  "compileOnSave": false,
  "buildOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

person Hongbo Miao    schedule 29.08.2016    source источник
comment
Что произойдет, если вы удалите строку "lib": ["es6", "dom"] из строки tsconfig.json?   -  person Nitzan Tomer    schedule 30.08.2016
comment
@NitzanTomer все тот же   -  person Hongbo Miao    schedule 30.08.2016
comment
Должна быть путаница между угловое местоположение и встроенное местоположение , а почему я не уверен. Это просто ошибка IntelliSense или компиляция не удалась? Вы пробовали его запустить? Он также не работает во время выполнения?   -  person Nitzan Tomer    schedule 30.08.2016
comment
@NitzanTomer просто ошибка intellisense, теперь я чувствую, что это больше похоже на проблему Webstorm. Я сообщу Webstorm.   -  person Hongbo Miao    schedule 30.08.2016
comment
Попробуйте импортировать угловое местоположение под другим именем, скажем, AngularLocation, может быть, это позволит вам избавиться от ошибки?   -  person Nitzan Tomer    schedule 30.08.2016
comment
@NitzanTomer Я использую import { Location as Location2 } from '@angular/common'; и constructor(private _location: Location2) {}, это решает проблему...   -  person Hongbo Miao    schedule 30.08.2016


Ответы (1)


Спасибо за помощь @NitzanTomer.

Похоже, эта проблема связана с WebStorm.

Я сообщил об этом в WebStorm, вы можете отследить проблему здесь:

https://youtrack.jetbrains.com/issue/WEB-23021

person Hongbo Miao    schedule 29.08.2016