Typescript NPM模块导入导致引用失败

Typescript NPM模块导入导致引用失败,typescript,npm,Typescript,Npm,我对Typescript比较陌生(我已经尝试使用它好几年了,但从未真正理解过某些方面)。这个问题已经困扰了我一段时间,与NPM进口有关。我尝试在dashjs和chartjs的Typescript中使用一些web NPM模块。当尝试导入它们并从运行程序脚本引用它们时,两者都不起作用 程序文件似乎看不到SensedPlayback类,这意味着某些东西没有正确编译,但是SensedPlayback的JS文件生成了。删除SensedPlayback.ts文件顶部的导入,允许程序文件查看,但导入的模块无法

我对Typescript比较陌生(我已经尝试使用它好几年了,但从未真正理解过某些方面)。这个问题已经困扰了我一段时间,与NPM进口有关。我尝试在dashjs和chartjs的Typescript中使用一些web NPM模块。当尝试导入它们并从运行程序脚本引用它们时,两者都不起作用

程序文件似乎看不到SensedPlayback类,这意味着某些东西没有正确编译,但是SensedPlayback的JS文件生成了。删除SensedPlayback.ts文件顶部的
导入
,允许程序文件查看,但导入的模块无法工作。模块的intellisense在
SensedPlayback.ts中工作,表明模块导入工作正常

任何帮助都将不胜感激! 杰拉德

tsconfig.json SensedPlayback.ts(带导入)
import*作为dashjs从“dashjs”导入;
命名空间计时src{
导出声明var TimingObject:任意;
导出声明var MediaSync:any;
}
类感播放{
生产:生产;
videosDiv:htmldevelment;
视频:dashjs.MediaPlayerClass[];
seekHead:HTMLInputElement;
playBtn:HTMLButtonElement;
pauseBtn:HTMLButtonElement;
_PlaybackTimeReceiver:PlaybackTimeSync;
_计时对象:任何;
_Isseek:布尔型;
构造器(制作:制作,视频sdiv:htmldevelment,seekHead:HTMLInputElement,playBtn:htmlButtoneElement,pauseBtn:htmlButtoneElement){
这个。生产=生产;
this.videosDiv=videosDiv;
this.seekHead=seekHead;
this.playBtn=playBtn;
this.pauseBtn=pauseBtn;
这是第页();
这是。_playbacktimereceiver=new PlaybackTimeSync();
}
开始(){
这个._playbacktimereceiver.subscribe((tr)=>{
这个.loadMediaForTime(tr.start);
});
这是。_playbacktimereceiver.start();
}
_设置页面(){
this.playBtn.addEventListener('单击',(事件)=>{
更新({velocity:1.0});
});
this.pauseBtn.addEventListener('单击',(事件)=>{
更新({velocity:0.0});
});
this.seekHead.addEventListener('mousedown',(事件)=>{
这是真的;
});
this.seekHead.addEventListener('mouseup',(事件)=>{
更新({position:this.seekHead.value});
这个。_isseek=false;
});
}
loadMediaForTime(时间:日期){
let takes=this.production.takes.filter((t)=>{
t、 媒体。一些((m)=>m.startTime>=时间
&&新日期(m.startTime.setmillizes(m.startTime.getmillizes()+m.duration)){return c.id==m.cameraId}).name;
包装器。附加子项(标题);
appendChild(视频);
这个.videosDiv.appendChild(包装器);
这个。视频。推(播放器);
}
这是。_configurePlayers();
}
_配置播放器(){
用于(本节第五节视频){
v、 on('loadstart',函数(事件){
v、 setMaxAllowedBitrateFor('video',4600);
});
v、 on('loadedmetadata',(事件)=>{
if(this._timingObject==未定义){
this._timingObject=new TIMINGSRC.timingObject({range:[0,event.target.duration]});
this.seekHead.min='0';
this.seekHead.step='0.25';
this.seekHead.max=`${v.duration()}`;
此._timingObject.on('timeupdate',()=>{
如果(!此._正在查看){
this.seekHead.value=this._timingObject.clock.now();
}
});
}
var sync=new TIMINGSRC.MediaSync(event.target,this.\u timingObject);
});
}
}
}
SensedPlaybackProgram.ts
let videosDiv=document.getElementById('cameras');
设seekHead=document.getElementById('seekHead');
让playBtn=document.getElementById('play');
让pauseBtn=document.getElementById('pause');
let production:production=JSON.parse((document.getElementById('production')).value);
let playback=新感知播放(制作、视频SDIV、seekHead、播放BTN、暂停播放TN);
playback.start();

当您编译一系列不使用
导入
导出
的文件时,这些文件将被视为非模块,它们声明的所有符号都将在全局空间中结束。这就是为什么当您删除
import
语句时,
SensedPlayback程序.ts
能够看到
SensedPlayback
,即使它是在
SensedPlayback.ts
中定义的

SensedPlayback.ts
中添加
import
语句时,将其转换为一个TypeScript模块,然后形成一个表单,如果要使用它定义的符号,则需要从该模块中导出它,并将符号导入要使用它的位置。因此,修改
SensedPlayback.ts
使其具有:

export class SensedPlayback {
...
SensedPlaybackProgram.ts
中,使用以下内容导入它:

import { SensedPlayback } from "./SensedPlayback";

(根据需要调整路径。)

完美这就是问题所在。这一直是一件很重要的事情
let videosDiv = <HTMLDivElement>document.getElementById('cameras');
let seekHead = <HTMLInputElement>document.getElementById('seekhead');
let playBtn = <HTMLButtonElement>document.getElementById('play');
let pauseBtn = <HTMLButtonElement>document.getElementById('pause');

let production : Production = JSON.parse((<HTMLInputElement>document.getElementById('production')).value);

let playback = new SensedPlayback(production, videosDiv, seekHead, playBtn, pauseBtn);

playback.start();
export class SensedPlayback {
...
import { SensedPlayback } from "./SensedPlayback";