Свойство "share" не существует в типе "Навигатор"
Мне нужно использовать WebShareAPI в моем приложении Ionic.
Вот мой код, предложенный во введении API веб-ресурса
if (window.navigator && window.navigator.share) {
window.navigator.share({
title: 'title',
text: 'description',
url: 'https://soch.in//',
})
.then(() => console.log('Successful share'))
.catch((error) => console.log('Error sharing', error));
} else {
alert('share not supported');
}
Однако компиляция Typescript завершается неудачно со следующей ошибкой:
[11:31:11] typescript: src/pages/channel_home/channel_home.ts, line: 89
Property 'share' does not exist on type 'Navigator'.
Существует вероятная причина, объясняемая здесь DOM lib: добавлена поддержка navigator.share
Тем не менее, я хотел бы узнать какой-нибудь обходной путь, чтобы заставить WebShareApi работать в моем приложении Ionic, в частности, и в любом приложении Angular или Typescript в целом.
Ответы
Ответ 1
На основе этого ответа вы можете попытаться определить переменную типа any
и присвоить ей значение Type Navigator. Функция isssue связана с типом типаScript.
let newVariable: any;
newVariable = window.navigator;
if (newVariable && newVariable.share) {
newVariable.share({
title: 'title',
text: 'description',
url: 'https://soch.in//',
})
.then(() => console.log('Successful share'))
.catch((error) => console.log('Error sharing', error));
} else {
alert('share not supported');
}
Другим вариантом будет расширение интерфейса Navigator, как это предлагается в ссылке, опубликованной выше.
Ответ 2
Это также работает, и нам не нужно создавать newVariable.
if (window.navigator && window.navigator.share) {
window.navigator['share']({
title: 'title',
text: 'description',
url: 'https://soch.in//',
})
.then(() => console.log('Successful share'))
.catch((error) => console.log('Error sharing', error));
} else {
alert('share not supported');
}
Ответ 3
Если вы ищете правильный ответ, просто добавьте его в свой файл global.d.ts
:
type ShareData = {
title? : string;
text? : string;
url? : string;
};
interface Navigator
{
share? : (data? : ShareData) => Promise<void>;
}
Это правильно отражает API уровня 1.
Ответ 4
Это сработало для меня
let newVariable = (window.navigator as any)
if(newVariable.share){
newVariable.share({
title: 'title',
text: 'description',
url: 'https://soch.in//',
})
.then(() => console.log('Successful share'))
.catch((error) => console.log('Error sharing', error));
} else {
alert('share not supported');
}
Ответ 5
в моем случае: в Angular, на модуле, который я использую:
navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
и машинопись показывает ошибку, MozGetUserMedia не является свойством.
Я исправил с помощью:
declare const navigator: any;
Может быть, тот же подход будет работать для вас: