diff --git a/.all-contributorsrc b/.all-contributorsrc
index 927ebe2b8..405500e8f 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -349,10 +349,8 @@
       "profile": "https://github.com/atulrnt",
       "contributions": [
         "code",
-      ],
-        "code"
       ]
-    },
+    }
   ],
   "skipCi": true,
   "contributorsPerLine": 7
diff --git a/types/three/src/textures/CanvasTexture.d.ts b/types/three/src/textures/CanvasTexture.d.ts
index 6828dff37..816e07dcd 100644
--- a/types/three/src/textures/CanvasTexture.d.ts
+++ b/types/three/src/textures/CanvasTexture.d.ts
@@ -1,7 +1,7 @@
 import { Texture } from './Texture';
 import { Mapping, Wrapping, TextureFilter, PixelFormat, TextureDataType } from '../constants';
 
-export class CanvasTexture extends Texture {
+export class CanvasTexture extends Texture<HTMLCanvasElement | OffscreenCanvas> {
     /**
      * @param canvas
      * @param [format=THREE.RGBAFormat]
@@ -15,7 +15,7 @@ export class CanvasTexture extends Texture {
      * @param [encoding=THREE.LinearEncoding]
      */
     constructor(
-        canvas: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap,
+        canvas: HTMLCanvasElement | OffscreenCanvas,
         mapping?: Mapping,
         wrapS?: Wrapping,
         wrapT?: Wrapping,
diff --git a/types/three/src/textures/CompressedTexture.d.ts b/types/three/src/textures/CompressedTexture.d.ts
index 582413c56..7f8bc073a 100644
--- a/types/three/src/textures/CompressedTexture.d.ts
+++ b/types/three/src/textures/CompressedTexture.d.ts
@@ -1,4 +1,4 @@
-import { Texture } from './Texture';
+import { Dimensions2D, Texture } from './Texture';
 import {
     Mapping,
     Wrapping,
@@ -8,7 +8,7 @@ import {
     TextureEncoding,
 } from '../constants';
 
-export class CompressedTexture extends Texture {
+export class CompressedTexture extends Texture<Dimensions2D> {
     /**
      * @param mipmaps
      * @param width
@@ -38,9 +38,6 @@ export class CompressedTexture extends Texture {
         encoding?: TextureEncoding,
     );
 
-    get image(): { width: number; height: number };
-    set image(value: { width: number; height: number });
-
     mipmaps: ImageData[];
 
     /**
diff --git a/types/three/src/textures/CubeTexture.d.ts b/types/three/src/textures/CubeTexture.d.ts
index 75958c05e..f6659787f 100644
--- a/types/three/src/textures/CubeTexture.d.ts
+++ b/types/three/src/textures/CubeTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { BaseTextureImageType, Texture } from './Texture';
 import { Mapping, Wrapping, TextureFilter, PixelFormat, TextureDataType, TextureEncoding } from '../constants';
 
-export class CubeTexture extends Texture {
+export class CubeTexture extends Texture<BaseTextureImageType[], CubeTexture> {
     /**
      * @param [images=[]]
      * @param [mapping=THREE.CubeReflectionMapping]
@@ -15,7 +15,7 @@ export class CubeTexture extends Texture {
      * @param [encoding=THREE.LinearEncoding]
      */
     constructor(
-        images?: any[], // HTMLImageElement or HTMLCanvasElement
+        images?: BaseTextureImageType[],
         mapping?: Mapping,
         wrapS?: Wrapping,
         wrapT?: Wrapping,
diff --git a/types/three/src/textures/Data3DTexture.d.ts b/types/three/src/textures/Data3DTexture.d.ts
index 52dfd17b6..e13a63947 100644
--- a/types/three/src/textures/Data3DTexture.d.ts
+++ b/types/three/src/textures/Data3DTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { DataDimensions3D, Texture } from './Texture';
 import { TextureFilter } from '../constants';
 
-export class Data3DTexture extends Texture {
+export class Data3DTexture extends Texture<DataDimensions3D> {
     constructor(data: BufferSource, width: number, height: number, depth: number);
 
     /**
diff --git a/types/three/src/textures/DataArrayTexture.d.ts b/types/three/src/textures/DataArrayTexture.d.ts
index 594c236eb..a2f3f3717 100644
--- a/types/three/src/textures/DataArrayTexture.d.ts
+++ b/types/three/src/textures/DataArrayTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { DataDimensions3D, Texture } from './Texture';
 import { TextureFilter } from '../constants';
 
-export class DataArrayTexture extends Texture {
+export class DataArrayTexture extends Texture<DataDimensions3D> {
     constructor(data?: BufferSource, width?: number, height?: number, depth?: number);
 
     /**
diff --git a/types/three/src/textures/DataTexture.d.ts b/types/three/src/textures/DataTexture.d.ts
index 2d847a474..3bd15eeb2 100644
--- a/types/three/src/textures/DataTexture.d.ts
+++ b/types/three/src/textures/DataTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { DataDimensions2D, Texture } from './Texture';
 import { Mapping, Wrapping, TextureFilter, PixelFormat, TextureDataType, TextureEncoding } from '../constants';
 
-export class DataTexture extends Texture {
+export class DataTexture extends Texture<DataDimensions2D> {
     /**
      * @param data
      * @param width
diff --git a/types/three/src/textures/DepthTexture.d.ts b/types/three/src/textures/DepthTexture.d.ts
index 343d3034b..fc5d8a56e 100644
--- a/types/three/src/textures/DepthTexture.d.ts
+++ b/types/three/src/textures/DepthTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { Dimensions2D, Texture } from './Texture';
 import { Mapping, Wrapping, TextureFilter, TextureDataType } from '../constants';
 
-export class DepthTexture extends Texture {
+export class DepthTexture extends Texture<Dimensions2D> {
     /**
      * @param width
      * @param height
@@ -25,9 +25,6 @@ export class DepthTexture extends Texture {
         anisotropy?: number,
     );
 
-    get image(): { width: number; height: number };
-    set image(value: { width: number; height: number });
-
     /**
      * @default false
      */
diff --git a/types/three/src/textures/FramebufferTexture.d.ts b/types/three/src/textures/FramebufferTexture.d.ts
index c5b52178a..ebbe5826f 100644
--- a/types/three/src/textures/FramebufferTexture.d.ts
+++ b/types/three/src/textures/FramebufferTexture.d.ts
@@ -1,7 +1,7 @@
-import { Texture } from './Texture';
+import { Dimensions2D, Texture } from './Texture';
 import { PixelFormat } from '../constants';
 
-export class FramebufferTexture extends Texture {
+export class FramebufferTexture extends Texture<Dimensions2D> {
     readonly isFramebufferTexture: true;
 
     constructor(width: number, height: number, format: PixelFormat);
diff --git a/types/three/src/textures/Texture.d.ts b/types/three/src/textures/Texture.d.ts
index ef0391bee..b82558832 100644
--- a/types/three/src/textures/Texture.d.ts
+++ b/types/three/src/textures/Texture.d.ts
@@ -11,8 +11,33 @@ import {
     TextureDataType,
     TextureEncoding,
 } from '../constants';
+import { CubeTexture } from './CubeTexture';
 
-export class Texture extends EventDispatcher {
+export interface Dimensions2D {
+    width: number;
+    height: number;
+}
+
+export interface TextureData {
+    data: BufferSource;
+}
+
+export interface DataDimensions2D extends Dimensions2D, TextureData {}
+
+export interface DataDimensions3D extends DataDimensions2D {
+    depth: number;
+}
+
+export type BaseTextureMipMapType = TexImageSource | DataDimensions2D | DataDimensions3D;
+
+export type BaseTextureImageType = BaseTextureMipMapType | Dimensions2D;
+
+export type BaseTextureTypes = BaseTextureImageType | BaseTextureImageType[];
+
+export class Texture<
+    ImageT extends BaseTextureTypes = TexImageSource,
+    MipMapT extends BaseTextureMipMapType = TexImageSource,
+> extends EventDispatcher {
     /**
      * @param [image]
      * @param [mapping=THREE.Texture.DEFAULT_MAPPING]
@@ -26,7 +51,7 @@ export class Texture extends EventDispatcher {
      * @param [encoding=THREE.LinearEncoding]
      */
     constructor(
-        image?: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement,
+        image?: ImageT,
         mapping?: Mapping,
         wrapS?: Wrapping,
         wrapT?: Wrapping,
@@ -61,7 +86,7 @@ export class Texture extends EventDispatcher {
      * video element as a source for your texture image and continuously update this texture
      * as long as video is playing - the {@link VideoTexture} class handles this automatically.
      */
-    get image(): any;
+    get image(): ImageT;
 
     /**
      * An image object, typically created using the {@link TextureLoader.load} method.
@@ -71,12 +96,12 @@ export class Texture extends EventDispatcher {
      * video element as a source for your texture image and continuously update this texture
      * as long as video is playing - the {@link VideoTexture} class handles this automatically.
      */
-    set image(data: any);
+    set image(data: ImageT);
 
     /**
      * @default []
      */
-    mipmaps: any[]; // ImageData[] for 2D textures and CubeTexture[] for cube textures;
+    mipmaps: MipMapT[]; // ImageData[] for 2D textures and CubeTexture[] for cube textures;
 
     /**
      * @default THREE.Texture.DEFAULT_MAPPING