#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,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 по разрешению модуля нет упоминания о data: … из того, что я вижу. Есть ли способ заставить это работать в typescript?
Ответ №1:
Смотрите Объявления модулей с подстановочными знаками в руководстве по 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==';
Это сообщает Typescript, что импорт, соответствующий data:text/javascript;
префиксу, предоставит number
свойство (в виде числового типа) и fn
свойство (которое возвращает строку). Соответствующим образом настройте объявление модуля в соответствии с семантикой вашего импортера.
Комментарии:
1. Спасибо. Кажется, это работает для статического импорта, но динамический по-прежнему завершается неудачей. Несмотря на то, что вы направили меня на правильный путь, я думал обо всем этом неправильно.