Как да използвате изрично типовете 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