TS中命名空间声明后is not defined

文件1:egret_native.d.ts内容如下

declare namespace egret_native {
    const enum SensorType {
        Accelerometer = 1,
        Compass = 2,
        DeviceMotion = 3,
        Gyroscope = 4,
    }

    const enum ERuntimeMode {
        Browser = 0,
        WX = 1,
        BrowserWithWXApi = 2,
    }

    const enum SensorInterval {
        // 适用于更新游戏的回调频率,在 20ms/次 左右
        game = 1,
        // 适用于更新 UI 的回调频率,在 60ms/次 左右
        ui = 2,
        // 普通的回调频率,在 200ms/次 左右
        normal = 3,
    }

    interface RenderingContextConfig {
        /**
         * Web+WX: WebGL, Canvas2D
         * Boolean that indicates if the canvas contains an alpha buffer.
         */
        alpha?: boolean;

        /**
         * Web+WX: WebGL
         * 表示是否抗锯齿
         */
        antialias?: boolean;

        /**
         * WX: WebGL
         * 抗锯齿样本数。最小值为 2,最大不超过系统限制数量,仅 iOS 支持
         */
        antialiasSamples?: number;

        /**
         * Web: WebGL
         * Boolean that indicates that the drawing buffer has a depth buffer of at least 16 bits.
         */
        depth?: boolean;

        /**
         * Web+WX: WebGL
         * 表示是否绘图完成后是否保留绘图缓冲区
         */
        preserveDrawingBuffer?: boolean;

        /**
         * Web: WebGL
         * Boolean that indicates that the drawing buffer has a stencil buffer of at least 8 bits.
         */
        stencil?: boolean;
    }

    interface Canvas extends HTMLCanvasElement {
        // TODO: remove
        nativeDomInit();
        onAddToDocument();

        // TODO: remove
        nativeTypeMarker: ENativeTypeMarker;

        // WX API
        toTempFilePathSync(param): string;
        toTempFilePath(param): void;
    }

    interface WebGLContext extends WebGLRenderingContext {
        // flushCmd(webglBatchLen: number, ctx2dBatchLen: number);
        // _flushCmd();
        // createBatchObject(type);
        // bindCmdBatchBuffer(webglCmdBuffer: ArrayBuffer, ctx2dCmdBuffer: ArrayBuffer);

        // maxBatchLen: number;

        // arrayBuffer: ArrayBuffer;
        // uint32View: Uint32Array;
        // float32View: Float32Array;
        // uint16View: Uint16Array;
        // batchLen: number;

        // arrayBuffer2d: ArrayBuffer;
        // uint32View2d: Uint32Array;
        // float32View2d: Float32Array;
        // uint16View2d: Uint16Array;
        // batchLen2d: number;

        // VERTEX_SHADER: number;
    }

    interface Canvas2DContext extends CanvasRenderingContext2D {
        nativeDrawImage(image, dx: number, dy: number): void;
        nativeDrawImage(image, dx: number, dy: number, dWidth: number, dHeight: number): void;
        nativeDrawImage(image, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number): void;

        nativeDrawCanvas(image: Canvas, dx: number, dy: number): void;
        nativeDrawCanvas(image: Canvas, dx: number, dy: number, dWidth: number, dHeight: number): void;
        nativeDrawCanvas(image: Canvas, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number): void;
    }

    class UDPSocket {
        bind(port: number): number;
        setTTL(ttl: number): void;
        connect(addr: string, port: number): void;
        send(address: string, port: number, data: String | Uint8Array | ArrayBuffer): void;
        write(address: string, port: number, data: String | Uint8Array | ArrayBuffer): void;
        close(): void;
    }

    class KCPSocket {
        init(conv: number): void;
        bind(port: number): number;

        setMtu(mtu: number): void;
        setInterval(interval: number): void;
        setWndSize(sndwnd: number, rcvwnd: number): void;
        setNoDelay(nodelay: number, interval: number, resend: number, nc: number): void;
        setStream(stream: number): void;

        setTTL(ttl: number): void;

        connect(addr: string, port: number): void;
        send(data: String | Uint8Array | ArrayBuffer): void;
        close(): void;
    }

    class EgretNative {
        // members
        global: any;
        mode: ERuntimeMode;
        nativeConsole: boolean;
        nativeGLBatch: boolean;
        internal: boolean;
        jsinspector: boolean;
        jsengine: string; // v8 or jsc
        textInput: TextInput;
        fs: FileSystem;

        // ts members
        fontMapping: object;
        // TODO: remove this
        nativeRenderActive: boolean; // temp

        // callbacks
        onUncaughtReject: (promise: Promise<any>, reason) => void; // promise
        tickPendingReject: () => void; // promise
        encodeArgs: (...args) => string; // jsconsole
        onError: (err: any) => void;
        onPause: () => void;
        onResume: () => void;
        onTouch: (type: number, ids: Array<number>, xs_array: Array<number>, ys_array: Array<number>) => any;
        onResize: (width: number, height: number) => void;
        invokeCallback: (msg: string) => void;
        launch: (url?: string) => void;
        onTick: (timeStamp: number) => boolean;

        // configs
        getOption(key: string): string | null;
        sendInfoToPlugin(arg: string): void;

        // javascript engine
        require(url: string): any;
        requireSource(text: string, url: string): any;
        enableConsole(on: boolean): void;
        gc(): void;
        log(level: number, msg: string): void;
        uncaughtPromise(promise: Promise<any>, value: any): void;

        // html
        onHtmlLoaded(): void;
        reload(url: string): void;

        // storage
        // TODO: storage to object
        localStorageGetItemKeyList(): string;
        localStorageGetItem(key: string): string;
        localStorageSetItem(key: string, value: string): void;
        localStorageRemoveItem(key: string): void;
        localStorageClear(): void;

        sessionStorageGetItem(key: string): string;
        sessionStorageSetItem(key: string, value: string): void;
        sessionStorageRemoveItem(key: string): void;
        sessionStorageClear(): void;

        // time/timer
        addTimer(callback: any, time: number, loop: boolean): number;
        removeTimer(id: number): void;
        performanceNow(): number;

        // render
        setOnUpdate(callback: any): void;
        setFrameRate(fps: number): void;

        // nativeRender
        nrSetCustomFont(name: string, path: string): void;

        // canvas
        setCanvasStyleTop(value: number);
        getCanvasStyleTop(): number;
        setCanvasStyleLeft(value: number);
        getCanvasStyleLeft(): number;
        setCanvasStyleWidth(value: number);
        getCanvasStyleWidth(): number;
        setCanvasStyleHeight(value: number);
        getCanvasStyleHeight(): number;
        getWindowInnerWidth(): number;
        getWindowInnerHeight(): number;
        setCanvasStyleTransform(a, b, c, d, tx, ty): void;

        createCanvas(mainCanvas: boolean): egret_native.Canvas;
        getContext(canvas: egret_native.Canvas, type: ECanvasContextType, config: ECanvasContextAttributes): any;
        createObject(type: ObjectType, cb: object): object;

        // device
        getDevicePixelRatio(): number;
        getUserAgent(): string;
        getPlatform(): string;
        getSystemInfo(): string;

        // utils
        btoa_atob(str: string, btoa: boolean): string;
        alert(msg: string): void;
        sendFpsLog(msg: string, level: number): void;

        // resource
        loadArchive(path: string): boolean;
        loadResource(path: string, promise: any): void;
        loadResource(path: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): number;
        loadResourceSync(path: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): void;
        httpRequest(url: string, method: string, headerString: string, requestData: string, binary: boolean, promise: any, timeout: number): number;
        abortNetworkTask(taskId: number): void;
        readResource(url: string, promise: any, type: EncodingType, async: boolean): void;
        saveToFile(download: any, url: string): void;

        gameLoadFont(font: string): string;
        getTextHeight(font: string, text: string, size: number, bold: boolean, italic: boolean): number;

        // device
        setKeepScreenOn(on: boolean): void;
        getBatteryInfo(promise: any, async: boolean): void;
        setClipboardData(value: string): boolean;
        getClipboardData(): string;
        onNetworkStatusChange(promise: any): void;
        getNetworkType(): NetworkType;
        setScreenBrightness(value: number): void;
        getScreenBrightness(): number;
        startSensor(st: SensorType, interval: SensorInterval): void;
        stopSensor(st: SensorType): void;
        vibrate(duration: number): void;

        createObject(ot: ObjectType, cb: object): object;

        // class
        Node: any;
        Text: any;
        HTMLElement: any;
        HTMLAnchorElement: any;
        HTMLCanvasElement: any;
        HTMLVideoElement: any;
        HTMLInputElement: any;
        HTMLTextAreaElement: any;
        HTMLScriptElement: any;
        CanvasRenderingContext2D: any;
        WebGLRenderingContext: any;
        WebGLCompressedTexturePVRTC: any;
        WebGLCompressedTextureETC1: any;
        OES_standard_derivatives: any;

        // hacks
        // in common/global/canvas.ts
        markMainCanvas(canvas): boolean;

        // export for nativeRender
        NativeRenderSurface: any;
        NativeDisplayObject: any;
        nrCreateArmatureDisplay: () => any;
    }

    class TextInput {
        show(type: ETextInputType, inputId: number, config: string);
        hide();
        setText(text: string, color: number);
        setBound(config: string);

        notify(event: EInputNotify, value: number | string);
        // wxnotify(event: EWxInputNotify, value: number | string);
    }

    const enum ETouchEvents {
        Start = 0,
        End = 1,
        Move = 2,
        Cancel = 3,
        Click = 4,
    }

    // end callbacks

    function toDataUrl(data, width, height);

    class GLBatch {
        nativeFlushCmd(buffer: ArrayBuffer, length: number);
        nativeCreateBatchObj(number: number);

        bindBuffer(ctxId: number, target: number, buffer: any): void;
        getActiveAttrib(program: any, index: number): any;
        getActiveUniform(program: any, index: number): any;
        getAttachedShaders(program: any): any;
        getAttribLocation(program: any, name: string): any;
        getProgramInfoLog(program: any): any;
        getProgramParameter(program: any, pname: any): any;
        getShaderInfoLog(shader: any): any;
        getShaderParameter(shader, pname): any;
        getShaderSource(shader): any;
        getUniform(program, location): any;
        getUniformLocation(program, name): any;
        isBuffer(buffer): any;
        isFramebuffer(framebuffer): any;
        isProgram(program): any;
        isRenderbuffer(renderbuffer): any;
        isShader(shader): any;
        isTexture(texture): any;
        shaderSource(shader, source): void;

        getContextBatchId(context: any): number;
        _flushCmd();
        _switchContext(ctxId: number);
        _createObject(webglCtx: any);
        _encodeUTF8(str: string);
    }

    class NativeRenderBuffer {
        constructor();
        nativeId: number;
    }

    class DomParser {
        static getElementsByTagName(tagName: string): Array<any>;
        static querySelector(selector: string): any;
        static querySelectorAll(selector: string): any;
        static getElementById(elementId: string): any;
        static getElementsByName(name: string): any;
        static getElementsByClassName(className: string): any;
        static write(str: string): void;
        static createElement(tagName: string): any;
    }

    class Image {
        onload(): void;
        onerror(): void;
        loadByBase64(data: string): void;
        loadByPath(path: string): void;

        imageId: number;
        width: number;
        height: number;

        // attrib not in NativeImage
        _container: any;
        _src: string;
        _emitter: any;

        // keep in js
        nativeId: number;
    }

    interface WebSocketCallback {
        onOpen();
        onMsg(msg: any);
        onError();
        onClose();
    }

    class WebSocket {
        open(url: string, protocols: string): void;
        send(data: any): void;
        close(code: any, reason: any): void;

        binaryType: string;
    }

    const enum EncodingType {
        String = 0,
        ArrayBuffer = 1,
    }

    class FileSystem {
        access(path: string, promise: any, async: boolean): void;
        copyFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
        appendFileString(path: string, data: string | String, promise: any, async: boolean): void;
        appendFileBin(path: string, data: ArrayBuffer, promise: any, async: boolean): void;
        writeFileString(path: string, data: string | String, promise: any, async: boolean): void;
        writeFileBin(path: string, data: ArrayBuffer, promise: any, async: boolean): void;
        readFile(path: string, promise: any, type: EncodingType, async: boolean): void;
        renameFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
        mkdir(path: string, recursive: boolean, promise: any, async: boolean): void;
        rmdir(path: string, recursive: boolean, promise: any, async: boolean): void;
        readDir(path: string, promise: any, async: boolean): void;
        saveFile(srcPath: string, dstPath: string, promise: any, async: boolean): void;
        statFile(path: string, recursive: boolean, promise: any, async: boolean): void;
        unlink(path: string, promise: any, async: boolean): void;
        getSavedFileList(promise: any): void;
        removeSavedFile(path: string, promise: any): void;
        unzipFile(zipPath: string, targetDir: string, promise: any): void;

        downloadFile(url: string, path: string, header: string, promise: any): number;
        downloadSubpack(url: string, promise: any): void;
        uploadFile(url: string, path: string, name: string, header: string, formData: string, promise: any): number;
        loadFileWithSrc(url: string, promise: any, unzip: boolean): void;

        toDiskPath(path: string): string;
    }

    class NativeAudio {
        load(path: string): void;
        onLoadError(): void;
        play(): void;
        pause(): void;
        stop(): void;
        destroy(): void;
        onSetTimeCallback(add: boolean): void;

        duration: number;
        currentTime: number;
        volume: number;
        autoplay: boolean;
        loop: boolean;
        paused: boolean;
        buffered: number;
    }

    class NativeVideo {

    }

    class NativeFilter {
        _idx: number;
        setFilterData(vshader: string, fshader: string, uniformVals: string): void;
    }

    class IndexedDB {
        static open(name: string, version: any, promise_: object): void;
    }

    var indexedDB: IndexedDB;
}

 

文件2:egret_native.ts内容如下

// THIS IS !!NOT!! A MODULE
module.exports = egret_native as unknown as egret_native.EgretNative;

其他文件引用:

const native = require("../../common/global/egret_native");
console.log(native.HTMLCanvasElement);

文件目录:
image.png

运行结果及报错内容:

编译成功后,运行结果Uncaught ReferenceError: egret_native is not defined
请问是什么原因导致的呢?集成到原生客户端没有问题,集成到webview不行。

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题