我正在处理一个类PlaybackControl
,我用它来创建两个HTMLElement:
-
PlaybackControlButton: HTMLButtonElement
个 -
PlaybackControlMenu: HTMLDivElement
个
现在,要初始化类对象,我需要三个参数:
-
videoPlayer: HTMLVideoElement
个 -
playbackRates: PlaybackRates
个 -
options: PlaybackControlOptions
个
其中:
type Shortcuts = Record<string, { key: string, value: string }>
type PlaybackRates = string[]
interface ShortcutsEnabled {
enableShortcuts: true
shortcuts: Shortcuts
}
interface ShortcutsDisabled {
enableShortcuts: false
}
interface DefaultOptions extends ShortcutsEnabled {}
type PlaybackControlOptions = DefaultOptions | ShortcutsDisabled
此外,我对所有这些参数都有缺省值,
-
videoPlayer
默认为document.querySelector('video') as HTMLVideoElement
-
playbackRates
默认为静态属性PlaybackControl.DEFAULT_PLAYBACK_RATES
-
options
默认为{ enableShortcuts: true, shortcuts: PlaybackControl.DEFAULT_SHORTCUTS }
现在,我想创建一个重载的构造函数,它应该在所有情况下都能工作:
- 未传递任何参数
- 传递的参数的任何组合 任何没有给出的值都应该退回到它的缺省值,
最后,videoPlayer: HTMLVideoElement
个是我想要存储为类属性的唯一参数,其余两个只是参数,我只想在构造函数中调用一些函数(因为我以后不会用到它们).
目前,我编写的构造函数是:
constructor (videoPlayer?: HTMLVideoElement, playbackRates: PlaybackRates = PlaybackControl.DEFAULT_PLAYBACK_RATES, options: PlaybackControlOptions = { enableShortcuts: true, shortcuts: PlaybackControl.DEFAULT_SHORTCUTS })
虽然这确实允许我在没有任何参数的情况下进行初始化,但当我try 执行以下操作时会失败:
new PlaybackControl({ enableShortcuts: false })
个
VSCode显示以下错误:
Object literal may only specify known properties, and 'enableShortcuts' does not exist in type 'HTMLVideoElement'.
虽然我确实理解潜在的问题(我想),但我无法解决这个问题. 如有任何帮助,我们不胜感激.
编辑:
-
由于口头描述可能很难深入,here您可以找到要运行的整个代码.
-
通过
any combination of arguments
%的澄清: 我应该能够给出我想要手动设置的任何参数(按顺序,有一些缺失),其余的后备为缺省