Новое окно.Image() не работает с машинопись
Я использую библиотеку KonvasJs для React. ( https://github.com/lavrton/react-konva)
Чтобы загрузить изображение в JavaScript/React, это
componentDidMount() {
const image = new window.Image();
image.src = "http://konvajs.github.io/assets/yoda.jpg";
image.onload = () => {
// setState will redraw layer
// because "image" property is changed
this.setState({
image: image
});
};
}
Работает нормально. Когда я переключаю Typescript, у меня появляется эта ошибка:
Я попытался также добавить:
interface Window {
Image: typeof Image;
}
или же
interface Windows extends Window {
Image: typeof Image;
}
или же
declare global {
interface Window {
Image: typeof Image;
}
}
Безуспешно
Связанные вопросы:
https://github.com/Microsoft/TypeScript/issues/10241
TypeScript - новое изображение () из глобальной области видимости
3 ответа
Решение:
const image = new (window as any).Image()
image.src = './dragFile.png'
image.onload = () => {
this.setState({
image: image
})
}
источник: https://github.com/Microsoft/reactxp/blob/master/src/web/Image.tsx#L139
Я нашел решение, используя следующий вопрос Stackru
Поскольку вы используете KonvajS, они переопределяют глобальные Image
определение с их собственным типом, который нарушает тип DOM Image HTMLImageElement по умолчанию
Если вы используете более строгие правила tslint, которые не позволяют any
ключевое слово, то это решение будет работать:
interface IHTMLImageElement {
prototype: HTMLImageElement
new(): HTMLImageElement
}
declare global {
// tslint:disable-next-line
interface Window {
Image: IHTMLImageElement
}
}
Вы, вероятно, не включая DOM
библиотека.
Если вы используете tsconfig.json, включите следующее:
{
"compilerOptions": {
"lib": [
"dom"
]
}
}
Или, если вы используете CLI:
tsc --lib dom ...
См. https://www.typescriptlang.org/docs/handbook/compiler-options.html для получения дополнительной информации.