Cum să încarci un model OBJ cu three.js în TypeScript
Folosesc TypeScript și three.d.ts de la DefinitelyTyped. Nu am probleme folosind THREE.JSONLoader, dar cum pot folosi un OBJLoader de aici într-un proiect TypeScript. Probabil că trebuie să creez un fișier OBJLoader.d.ts, dar nu am nicio idee cum să fac asta și apoi cum să folosesc definiția creată. Am încercat pur și simplu să copiez definiția THREE.JSONLoader și să o redenumesc în OBJLoader, dar nu a funcționat.
Răspuns #1
Ultima versiune de Three.js are acum versiuni ES Module pentru toate clasele din folderul examples/, împreună cu fișiere de declarație a tipurilor. Deci, acum poți:
import {OBJLoader} from 'three/examples/jsm/loaders/OBJLoader'
Și va fi tastat în TypeScript așa cum era de așteptat (plasează cursorul peste el pentru a vedea sfaturile în VS Code).
Răspunsul #2
Această răspuns a fost corect în momentul publicării, dar acum este depășit în 2019. Vezi răspunsul lui @trusktr de mai jos pentru o soluție mai bună astăzi.
După ce am privit sursa OBJLoader aici, (și cu referire la three.d.ts) un fișier simplu objloader.d.ts ar putea arăta așa:
/// <reference path="three.d.ts" />
export class OBJLoader extends EventDispatcher {
constructor();
load(url: string, callback?: (response:any) => any): void;
parse(data:any):any; // Not sure if the return value can be typed. Seems to be a group but I can't find a definition for that in three.d.ts?
}
Atenție: aceasta este realizată rapid și nu a fost testată, dar te poate ajuta să începi.
Apoi ai face referire la objloader.d.ts în același mod în care folosești în prezent three.d.ts. Nu uita să incluzi atât fișierele three.js cât și OBJLoader.js în pagina ta HTML, sau să le imporți dacă lucrezi cu module externe.
