如何在 Angular 10 中设置 Azure 媒体播放器打字稿定义

Posted

技术标签:

【中文标题】如何在 Angular 10 中设置 Azure 媒体播放器打字稿定义【英文标题】:How to set up Azure Media Player typescript definition in Angular 10 【发布时间】:2020-12-10 14:57:06 【问题描述】:

我在为 Angular 10 项目中的 Azure 媒体播放器设置打字稿定义时遇到问题。我正在使用来自documentation的*.d.ts 文件

我尝试使用 tsconfig.json 文件中的 typeRoots 设置定义:

"typeRoots": [ "./src/types/", "./node_modules/@types"],

我发现有冲突的教程要求包含类型的文件夹要么位于根级别,要么位于 src 文件夹内。目前,azuremediaplayer.d.ts 文件位于./src/types/azuremediaplayer/

在 tsconfig 文件中,有一个错误提示 Cannot find type definition file for 'azuremediaplayer'.

在我的组件中,我从the official documentation 复制粘贴了代码,没有函数(抛出错误)。

ngOnInit(): void 
    var myPlayer = amp('vid1', 
      "nativeControlsForTouch": false,
      autoplay: false,
      controls: true,
      width: "640",
      height: "400",
      poster: ""
    );
    myPlayer.src([
      src: "http://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest",
      type: "application/vnd.ms-sstr+xml"
    ])

  

如果我 ctrl+click 上面代码中的 amp,我会转到 .d.ts 文件,但函数调用中的一些参数会抛出错误:

Argument of type ' nativeControlsForTouch: boolean; autoplay: false; controls: true; width: string; height: string; poster: string; ' is not assignable to parameter of type 'Options'.


Object literal may only specify known properties, and '"nativeControlsForTouch"' does not exist in type 'Options'.

这样初始化时不会出现错误:

var myPlayer = amp('vid1', 
      autoplay: false,
      controls: true,
      poster: ""
    );
    myPlayer.src([
      src: "http://amssamples.streaming.mediaservices.windows.net/91492735-c523-432b-ba01-faba6c2206a2/AzureMediaServicesPromo.ism/manifest",
      type: "application/vnd.ms-sstr+xml"
    ])

  

如果播放器在 html 文件中实例化,则播放器可以工作。

我也尝试了in this answer 描述的步骤: 如果我使用/// <reference path="../../../types/azuremediaplayer/azuremediaplayer.d.ts" /> 引用该文件,则没有任何变化,但 json 中没有错误。如果我在 files: [] 属性中添加文件,amp() 将无法识别。如果我加"include": ["src/**/*"],和使用typeRoot一样,报错。

我应该如何设置播放器以使其正常工作?

【问题讨论】:

【参考方案1】:

我不认为这是特定于框架的,因此我将描述我在使用 Typescript 将其实现到 React 应用程序中时执行的步骤。

我已将类型定义文件存储到:

src/video-player/amp/azuremediaplayer.min.d.ts

我已将typeRoots 属性添加到我的tsconfig.json。请注意,您的项目可能会使用多个 typescript 配置文件。例如:在我的项目中,我有一个默认的和tsconfig.package.json 用于 npm 发布目的。 这是我在两个 tsconfig.files 中的 typeRoots 配置:

 "typeRoots": ["node_modules/@types", "src/video-player/amp"]

然后,在我的组件 .tsx 文件中,我可以使用 amp typescript 定义,例如:

readonly options: amp.Player.Options;

根据您的描述,我相信您已经正确配置了类型。 Typings 文件的版本是否与从 CDN 获取的 amp 版本一致? (我使用的是最新的 2.3.5)。如果是这样,则官方类型文件中可能存在错误/不准确 - 我可以在从 CDN 获取的缩小脚本中看到您的 nativeControlsForTouch 选项属性,但是,此属性不在类型文件中。 ¯\(ツ)

注意:很遗憾 amp 不是开源的,并且可以通过 npm 进行输入访问 - 请考虑投票 here。

【讨论】:

以上是关于如何在 Angular 10 中设置 Azure 媒体播放器打字稿定义的主要内容,如果未能解决你的问题,请参考以下文章

如何在 azure 中设置安全的 Web 套接字

在 Azure 应用配置中设置/添加功能标志

如何在 Angular UI 中设置手风琴标题的类/样式

如何在 Azure devops 中设置构建管道 [关闭]

如何在Azure中设置smtp服务器

在 Azure Webjobs SDK 中设置 nextVisibleTime