Javascript typescript中的数据URI导入

Javascript typescript中的数据URI导入,javascript,typescript,Javascript,Typescript,在纯JS中,我们可以使用带有数据uri的导入语句,例如: import { number, fn } from 'data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw=='; 或动态: import('data:text/javascript;charset=utf-8;base64,ZXhw

在纯JS中,我们可以使用带有数据uri的导入语句,例如:

import { number, fn } from 'data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw==';
或动态:

import('data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw==')
    .then(module => console.log(module)); 
但是,将相同的代码放入typescript文件会导致“找不到模块”错误

我的tsconfig.json如下所示:

{
    "compilerOptions": {
        "module": "esnext",
        "lib": [
            "esnext",
            "es6",
            "dom"
        ],
        "moduleResolution": "node",
        "outDir": "./build",
        "noImplicitAny": false,
        "removeComments": true,
        "preserveConstEnums": true,
        "sourceMap": true,
        "target": "es6",
        "jsx": "react"
    },
    "include": [
        "src/**/*", "../addon/build/background.js"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}
模块解析的Typescript文档没有提到数据:。。。据我所见。有没有办法让它在typescript中工作?

请参阅typescript手册中的

你可以这样做:

// types.d.ts
declare module "data:text/javascript;*" {
  export const number: number;
  export function fn(): string;
}

// index.ts

/// <reference path="types.d.ts"/>
import { number, fn } from 'data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw==';

//types.d.ts
声明模块“数据:text/javascript;*”{
导出常量编号:编号;
导出函数fn():字符串;
}
//索引
/// 
从'data:text/javascript'导入{number,fn};字符集=utf-8;base64,ZXHWB3J0IgnVbNN0IG51BWJLCIA9IDQYOWPLEHBVCNQGY29UC3QGZM4GPSAOKSA9PIAISGSBG8GD29YBGQIOW==';

这告诉Typescript一个与
数据匹配的导入:text/javascript
前缀将公开一个
number
属性(作为数字类型)和一个
fn
属性(返回字符串)。适当调整模块声明以符合进口商的语义。

谢谢。这似乎适用于静态导入,但动态导入仍然失败。不管怎样,你把我带到了正确的轨道上,我一直在想这一切都错了。