Аргумент типа X нельзя присвоить параметру типа Y. Литерал объекта может указывать только известные свойства, а X не существует в типе Y.

Я пытаюсь заставить Leaflet и плагин работать вместе в проекте Ionic 2. Я установил и импортировал сам Leaflet и плагин leaflet-path-transform, а также с объявлением типа Leaflet, включенным в DefinatelyTyped. Весь код работает, если я добавлю declare var L: any;, чтобы игнорировать объявления типа.

Это важные части контроллера страницы (home.ts):

var polyline = new L.Polyline(
  L.GeoJSON.coordsToLatLngs([
    [114.14314270019531, 22.49479484975443],
    [114.21798706054688, 22.524608511026262],
    [114.20768737792969, 22.524608511026262],
    [114.20768737792969, 22.536024805886974]
  ]), {
    weight: 15,
    draggable: true,
    transform: true
  })
  .bindPopup("L.Polyline")
  .addTo(map);
  polyline.transform.enable();

draggable и transform не являются допустимыми параметрами в базовом Leaflet (как и .transform), поэтому я написал файл объявления типа в PROJECT_DIR\node_modules\@types\leaflet-path-transform\index.d.ts, чтобы определить их. То, что я написал до сих пор, основано на объявлении типа для leaflet-editable, так как этот плагин позволяет использовать новые MapOptions при создании объекта L.Map.

/// <reference types="leaflet" />

declare namespace L {

    export interface Polyline {
      draggable: boolean;
    }

    namespace Polyline {
        export interface PolylineOptions {
            draggable: boolean;
        }
    }

}

Пока это относится только к первому варианту, но не удалось устранить ошибку TypeScript:

Typescript Error
Argument of type '{ weight: number; draggable: boolean; }' is not assignable to parameter of type 'PolylineOptions'. Object literal may only specify known properties, and 'draggable' does not exist in type 'PolylineOptions'.

Может ли кто-нибудь помочь мне понять, что я здесь делаю неправильно? Сначала я подумал, что файл объявления нового типа просто игнорируется, но если я оставлю в нем опечатку, это вызовет новые ошибки, так что эффект есть.

Если это поможет, вот среда, в которой я работаю:

  • Ионная структура: 2.0.0
  • Ионный родной: 2.4.1
  • Ионные сценарии приложений: 1.0.0
  • Угловое ядро: 2.2.1
  • Угловой компилятор CLI: 2.2.1
  • Узел: 6.9.4
  • Платформа ОС: Windows 10
  • Платформа навигатора: Win32
  • Пользовательский агент: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/56.0.2924.87 Safari/537.36

person carpiediem    schedule 17.02.2017    source источник
comment
У вас получилось?   -  person ackuser    schedule 23.03.2017
comment
Еще нет. Я только что использовал модификатор any вместо правильного объявления типа.   -  person carpiediem    schedule 25.03.2017


Ответы (1)


вы можете прочитать этот пост http://yunkus.com/angular-error-object-literal-may-only-specify-known-properties/ очень легко решить, но трудно найти причину. использование «любого» все же является одним из способов, однако это не лучшее решение. Потому что мы просто хотим использовать пользовательский класс для создания переменной, верно? К счастью, ответ уже есть в этом посте. Вы можете его прочитать, но пост написан на китайском языке. Желаю, чтобы вы его получили.

person zhaoxixiong    schedule 06.01.2018