【发布时间】:2021-08-17 14:10:13
【问题描述】:
这个 repo 是 youtube api 的类型
https://www.npmjs.com/package/@types/youtube
将这些类型导入 vue2 项目的正确方法是什么?
以下代码抱怨类型未定义。但是如果我导入类型 ts 会抱怨并说缺少依赖项。
<template>
<div ref="ytplayer" class="MYouTube"></div>
</template>
<style lang="scss" scoped>
.MYouTube {
position: relative;
margin: 0 auto;
padding-bottom: 56.25%;
.iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
}
</style>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator';
import getYoutubeId from '@/utils/getYoutubeId';
import reframe from '@/utils/reframe';
import injectScript from '@/utils/injectScript';
@Component
export default class MYouTube extends Vue {
@Prop({ required: true })
url!: string;
vidId = '';
$refs!: {
ytplayer: any
};
created () {
const vidId = getYoutubeId(this.url);
if (vidId) {
this.vidId = vidId;
}
injectScript('https://www.youtube.com/iframe_api', () => {
this.injectAndPlay();
});
}
injectAndPlay () {
new YT.Player(this.$refs.ytplayer, {
videoId: this.vidId,
playerVars: {
'playsinline': 1
},
events: {
'onReady': (event) => {
event.target.playVideo();
reframe(this.$refs.ytplayer);
},
'onStateChange': () => {
console.log('do something');
}
}
});
}
}
</script>
我有一个 global.d.ts,但在这里我只能将 YT 声明为 any:
interface Window {
YT: any
}
在 tsconfig 中:
"typeRoots": [
"node_modules/@types"
],
但这不会自动解决:/
【问题讨论】:
标签: typescript vue.js types