Если бы вы не использовали 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 и не нужно создавать объект для установки вращения: