所以代码很简单:
calls.json
{"SERVER":{
"requests":{
"one":"1"
}
} }
Run Code Online (Sandbox Code Playgroud)
file.ts
import json = require('../static/calls.json');
console.log(json.SERVER);
Run Code Online (Sandbox Code Playgroud)
生成的javascript是正确的,当运行节点js服务器时,控制台日志json.SERVER打印出'{requests:{one:'1'}}',就像它应该的那样.
但是,打字稿编译器(commonjs),不知何故并不特别喜欢这种情况并抛出:"找不到模块'../static/calls.json'".
当然我试着写一个.d.ts文件,像这样:
declare module '../static/calls.json'{
var exp:any;
export = exp;
}
Run Code Online (Sandbox Code Playgroud)
这显然会抛出:"Ambient模块声明不能指定相对模块名称".
我也尝试了不同的变体,例如:
declare module 'calls.json' {
import * as json from '/private/static/calls.json';
export = json;
}
Run Code Online (Sandbox Code Playgroud)
然后要求:
import json = require('calls.json');
Run Code Online (Sandbox Code Playgroud)
没有正常工作,并有自己的小编译器错误:)
我想使用外部.json文件,因为我使用commonjs serverside和amd clientside,我想要一个文件来加载常量.
如何定义导入的 json 的类型?例如
{
"things": "foo"
}
Run Code Online (Sandbox Code Playgroud)
interface Data {
things: String,
another?: String
}
Run Code Online (Sandbox Code Playgroud)
import data from './data.json' // Should have type Data
console.log(data.things)
console.log(data.another) // Should be allowed but undefined
Run Code Online (Sandbox Code Playgroud)
该resolveJsonModule选项将自动为导入的 JSON 生成类型,但它是不完整的,因为 JSON 可能不包含数据的所有可能字段。
我自己如何定义类型?
在checkJs启用了 VsCode 的 nodej 项目中,当需要 json 文件时,例如
const myFile = require('./my-file.json')
Run Code Online (Sandbox Code Playgroud)
这会导致错误[ts] Cannot find module。
如何消除错误警告?
我试过了:
添加"resolveJsonModule": true到compilerOptionsin jsconfig.json,但它不起作用。
创建一个typing.d.ts包含以下内容的文件:
declare module '*.json' {
const value: any;
export default value;
}
但是现在出现了一个错误 [ts] Type 'typeof import("*.json")' must have a '[Symbol.iterator]()' method that returns an iterator. [2488]
我有一个弹出的 create-react-app 项目。将其更新到 webpack 5 后,我收到此错误。它在 webpack v4.41.5 上运行良好
node v10.23.0 操作系统:MacOS Catalina 10.15.7
错误:不应从默认导出模块导入命名的导出“版本”(导入为“版本”)(仅默认导出很快可用)
我正在使用以下 webpack 配置:
{ mode: 'production',
bail: true,
devtool: 'source-map',
entry:
[ '/Users/Homeoffice/Documents/toolbox-frontend-clone2/src/index.js' ],
output:
{ path: '/Users/Homeoffice/Documents/toolbox-frontend-clone2/build',
pathinfo: false,
filename: 'static/js/[name].[contenthash:8].js',
chunkFilename: 'static/js/[name].[contenthash:8].chunk.js',
publicPath: '/',
devtoolModuleFilenameTemplate: [Function],
globalObject: 'this' },
optimization:
{ minimize: false,
minimizer: [ [TerserPlugin], [OptimizeCssAssetsWebpackPlugin] ],
splitChunks: { chunks: 'all', name: false },
runtimeChunk: { name: [Function: name] } },
resolve:
{ modules:
[ 'node_modules',
'/Users/Homeoffice/Documents/toolbox-frontend-clone2/node_modules' ],
extensions:
[ '.web.mjs', '.mjs', …Run Code Online (Sandbox Code Playgroud) 在我的Angular项目中,我正在为我自己的小本地化服务导入JSON文件.我正在使用此处建议的方法,将我更新typings.d.ts为
declare module "*.json" {
const value: any;
export default value;
}
Run Code Online (Sandbox Code Playgroud)
这适用于Angular 6,但在更新到Angular 7后,当我尝试访问属性时,我的导入似乎未定义.
import * as de from './strings/de.json';
import * as en from './strings/en.json';
var s = en["mykey"]
Run Code Online (Sandbox Code Playgroud)
JSON有一个非常简单的key => value结构:
{
"myKey": "My Headline",
…
}
Run Code Online (Sandbox Code Playgroud)
6.1和7之间有什么变化可能会导致这种行为?
我引用的设置显示在下面的代码片段中
{
"compilerOptions": {
"resolveJsonModule": true,
}
}
Run Code Online (Sandbox Code Playgroud)
我不太明白为什么 TS 语言工程师会为 ? 添加一个标志"resolveJsonModule"?环境支持通过import语句(或require()方法)将 JSON 解析为模块,或者环境不支持。为什么要费心额外的复杂性呢?
我刚刚创建了一个干净的 VueJS 新项目,但无法加载 JSON 文件。
为了便于复制,我用我的问题创建了一个 Github 存储库:https : //github.com/devedse/VueJSImportJsonFile
在 Home.vue 页面中,我试图让 Json 加载工作。( https://github.com/devedse/VueJSImportJsonFile/blob/master/src/views/Home.vue )
当您在 VSCode 中打开此解决方案时,以下行显示错误:
import theJson from '@/assets/hi.json';
Run Code Online (Sandbox Code Playgroud)
Can't find module '@/assets/hi.json'
我已经搜索了所有 stackoverflow 并尝试了以下帖子中的所有内容:
https://github.com/chybie/ts-json
好的,我现在设法npm run serve通过将其添加到 tsconfig.json来使其在运行时正常工作:
{
"compilerOptions": {
"resolveJsonModule": true
}
}
Run Code Online (Sandbox Code Playgroud)
然而 VSCode 中的错误似乎仍然存在。有没有办法解决这个问题?
如何将本地存储的 JSON 文件读取到打字稿中的变量中?我有一个 json 照片文件,如下所示:
[
{
"id": 1,
"camera": "",
"location": "",
"iso": 0,
"aperture": 0,
"focal length": 0
},
{
"id": 2,
"camera": "",
"location": "",
"iso": 0,
"aperture": 0,
"focal length": 0
},
{
"id": 3,
"camera": "",
"location": "",
"iso": 0,
"aperture": 0,
"focal length": 0
}
]
Run Code Online (Sandbox Code Playgroud)
我正在尝试将文件作为文本读取,然后使用,Json.Parse但首先如何将其作为文本读取?我尝试过使用 FileReader.readAsText 但它只接受 blob 对象。我是否需要从文件路径创建 blob 对象,或者是否有更简单的方法来读取本地 JSON 文件?
我已将 Angular 项目更新为版本 12.0.5,将 Typescript 版本更新为 4.3.4,但在编译该项目时遇到问题。
目前,我在没有对分支进行更改的情况下收到以下错误:
Should not import the named export 'provinces' (imported as 'data') from default-exporting module (only default export is available soon)
Run Code Online (Sandbox Code Playgroud)
这是import:
import { ApiService, Municipality, Province } from '../../services/api.service';
Run Code Online (Sandbox Code Playgroud)
这就是我声明依赖于导入省份的变量的方式:
public provinces: Province[] = [];
private currentPorvince: Province;
Run Code Online (Sandbox Code Playgroud)
问题是什么?为什么会发生这种情况以及如何解决?
我有以下jsondata.json文件:
{
"name": "John",
"age": 30,
"car": "ferrari"
}
Run Code Online (Sandbox Code Playgroud)
在同一目录中,我有一个打字稿文件,main.ts其中我只是congole.log来自jsondata.json
import * as j from './jsondata.json';
console.log(j);
Run Code Online (Sandbox Code Playgroud)
结果令人惊讶:
{
name: 'John',
age: 30,
car: 'ferrari',
default: { name: 'John', age: 30, car: 'ferrari' }
}
Run Code Online (Sandbox Code Playgroud)
default那个字段是什么?为什么会出现,我该如何摆脱它?
作为参考,这是我的tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true,
"outDir": "./out",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"forceConsistentCasingInFileNames": true
}
}
Run Code Online (Sandbox Code Playgroud)