Angular 10'da Azure Media Player TypeScript tanımını nasıl kurulur


Angular 10 projesinde Azure Media Player için TypeScript tanımını ayarlarken sorun yaşıyorum. Belgelerden *.d.ts dosyasını kullanıyorum.

tsconfig.json dosyasında typeRoots kullanarak tanımı ayarlamayı denedim:

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

Türleri içeren klasörün ya kök seviyede ya da src klasörünün içinde bulunması gerektiğini belirten çelişkili eğitimler buldum. Şu anda, azuremediaplayer.d.ts dosyası ./src/types/azuremediaplayer/ içinde.

tsconfig dosyasında, 'azuremediaplayer' için tür tanım dosyası bulunamıyor. diye bir hata var.

Bileşenimde, resmi dokümantasyondan kodu, fonksiyonlar olmadan (hata verenler) kopyalayıp yapıştırdım.

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"
    }])

  }

Yukarıdaki koddan amp üzerine ctrl+klik yaparsam, .d.ts dosyasına yönlendiriliyorum, ancak fonksiyon çağrısındaki bazı parametreler hata veriyor:

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'.

Başlatma bu şekilde olduğunda hiçbir hata görünmez:

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"
    }])

  }

Oynatıcı, HTML dosyasında örneklendiğinde çalışır.

Ayrıca bu yanıtta açıklanan adımları da denedim: Eğer dosyayı /// <reference path="../../../types/azuremediaplayer/azuremediaplayer.d.ts" /> ile referans verirsem, hiçbir şey değişmiyor, yine de json'da hata yok. Eğer dosyayı files: [] özelliğime eklersem, amp() tanınmıyor. Eğer "include": ["src/**/*"] eklersem, bu typeRoot kullanmak ile aynı ve aynı hataları alıyorum.

Oyuncuyu çalışması için nasıl kurmalıyım?

Cevap #1

Bunun belirli bir çerçeveye özgü olduğunu sanmıyorum, bu yüzden bunu benim için çalışan React uygulamasına Typescript ile uyguladığımda yaptığım adımları açıklayacağım.

Tür tanımı dosyasını şunun içine kaydettim:

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

tsconfig.json dosyama typeRoots özelliğini ekledim. Projenizin birkaç typescript yapılandırma dosyası kullanabileceğini unutmayın. Örnek: Benim projemde, varsayılan olan bir dosya ve npm yayın amacıyla tsconfig.package.json dosyası var. İşte her iki tsconfig dosyamda typeRoots yapılandırmam:

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

O zaman, kendi .tsx bileşen dosyamda, amp typescript tanımını şöyle kullanabilirim:

readonly options: amp.Player.Options;

Açıklamanıza göre türleri doğru yapılandırdığınıza inanıyorum. Types dosyasının sürümü CDN'den alınan AMP sürümüyle uyumlu mu? (En son 2.3.5 sürümünü kullanıyorum). Öyleyse, resmi türler dosyasında bir hata/hata olabilir - CDN'den alınan küçültülmüş komut dosyasında nativeControlsForTouch seçenek özelliğinizi görebiliyorum, ancak bu özellik türler dosyasında mevcut değil. ¯\_(ツ)_/¯

Not: AMP'in açık kaynaklı olmaması ve npm üzerinden tip bilgileri ile erişilememesi üzücü - lütfen burada oy vermeyi düşünün.