ошибка TS2345: аргумент типа '{x: номер; у: число; z: число; } 'нельзя назначить параметру типа' string ' - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь создать изображение динамически с полученными значениями. Но почему-то я получаю ошибку ниже при установке атрибута позиции imgObj (код ниже)

xpos, ypos и zpos содержит строковые плавающие значения, такие как xpos = "-0.2", ypos="-0.1", zpos="0.2"

var imgObj = document.createElement("a-image");
imgObj.setAttribute("src",'url(' + $event.src + ')');
//imgObj.setAttribute("position",{x:0,y:0,z:0})
imgObj.setAttribute('position',{x:xpos, y:ypos, z:zpos});

Любая идея или указатели помогут ... спасибо

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если бы вы не использовали aframe, это было бы правильным поведением из TypeScript, потому что в мире только DOM / HTML вы получили бы неожиданные результаты, задав объекту значение setAttribute.

Чтобы сообщить TypeScript о дополнительных возможностях, добавляемых aframe, вы можете установить набранные значения aframe:

npm install -D @types/aframe

Это добавит наборы, которые говорят, что setAttribute может взять объект с номерами x, y, z, когда атрибут равен

Цитирование по буквам https://unpkg.com/@types/aframe@0.8.0/index.d.ts:

export interface Coordinate {
    x: number;
    y: number;
    z: number;
}

Затем опустите в файле:

setAttribute(type: 'position' | 'rotation' | 'scale', value: Coordinate): void;

Итак, похоже, что это должно быть сделано.

Последняя мысль

Стоит отметить, что использование setAttribute для этого не рекомендуется в рамках aframe, как показано в их документации: https://aframe.io/docs/0.8.0/components/position.html

Для повышения производительности и эргономики мы рекомендуем обновлять позицию напрямую с помощью Three.js Object3D .position Vector3 по сравнению с .setAttribute.

Этот метод проще, потому что у нас есть доступ ко всем утилитам Vector3, и быстрее, пропуская издержки .setAttribute и не нужно создавать объект для установки вращения:

0 голосов
/ 10 сентября 2018

Я думаю, что решение не использовать Typescript. Он не ожидает переопределения методов DOM.

...