作者:手机用户2602902715 | 来源:互联网 | 2023-02-01 09:13
您的问题不是由@types/vimeo__player
它与您的构建系统/配置相关.
打字稿类型定义永远,永远,永远不会影响运行时的行为.甚至编译时错误也没有比在控制台中显示红色更有效,Javascript仍然会被发出.
看看你已经得到的堆栈跟踪,我们也可以说它Player
是有效导入的,因为你说没有编译时错误,所以在构建方面的一切都很好.
事实上,错误说明了一切:TypeError: You must pass either a valid element or a valid id.
.
Player
说它期待一个HTMLElement
.
问题是,你使用的@ViewChild()
是Angular.当您查询本机元素时,此装饰器将返回一个包装器.这个包装器是类型的ElementRef
,并且有一个名为nativeElement
包含原始DOM元素的属性.
所以不要这样做:
this.player = new Player(this.playerContainer);
做这个:
this.player = new Player(this.playerContainer.nativeElement);
但是你现在可能会想"为什么TypeScript没有产生类型错误,因为我没有传递一个原生元素?" .这是一个很好的问题,我没有足够的数据来确定,但我认为你的导入可能不正确.
代替:
//noinspection TypeScriptCheckImport,TypeScriptCheckImport
import Player from "@vimeo/player";
你能尝试这样做吗?
import { Player } from '@vimeo/player';
查看.d.ts文件,看起来该Player是一个命名导出.但是你是对的,@ vimeo/player的类型定义是不完整的,或者与Javascript库不同步.你应该知道TypeScript中的那种类型的问题,虽然这不是每天都会发生;)
1> Morgan Touve..:
您的问题不是由@types/vimeo__player
它与您的构建系统/配置相关.
打字稿类型定义永远,永远,永远不会影响运行时的行为.甚至编译时错误也没有比在控制台中显示红色更有效,Javascript仍然会被发出.
看看你已经得到的堆栈跟踪,我们也可以说它Player
是有效导入的,因为你说没有编译时错误,所以在构建方面的一切都很好.
事实上,错误说明了一切:TypeError: You must pass either a valid element or a valid id.
.
Player
说它期待一个HTMLElement
.
问题是,你使用的@ViewChild()
是Angular.当您查询本机元素时,此装饰器将返回一个包装器.这个包装器是类型的ElementRef
,并且有一个名为nativeElement
包含原始DOM元素的属性.
所以不要这样做:
this.player = new Player(this.playerContainer);
做这个:
this.player = new Player(this.playerContainer.nativeElement);
但是你现在可能会想"为什么TypeScript没有产生类型错误,因为我没有传递一个原生元素?" .这是一个很好的问题,我没有足够的数据来确定,但我认为你的导入可能不正确.
代替:
//noinspection TypeScriptCheckImport,TypeScriptCheckImport
import Player from "@vimeo/player";
你能尝试这样做吗?
import { Player } from '@vimeo/player';
查看.d.ts文件,看起来该Player是一个命名导出.但是你是对的,@ vimeo/player的类型定义是不完整的,或者与Javascript库不同步.你应该知道TypeScript中的那种类型的问题,虽然这不是每天都会发生;)