- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的 Typescript 项目配置为具有以下目录结构:
src/
├── client/
│ └── tsconfig.json
│
├── server/
│ └── tsconfig.json
│
├── shared/
│ ├── utils/
│ │ └── type-utils.d.ts
│ │
│ └── tsconfig.json
│
└── tsconfig-base.json
client/tsconfig.json
, server/tsconfig.json
, 和 shared/tsconfig.json
各有"extends": "../tsconfig-base.json"
client/tsconfig.json
和 server/tsconfig.json
两者都有"references": [{ "path": "../shared" }]
shared/utils/type-utils.d.ts
不是模块,而是包含环境类型声明,如 Id
和 CouldBeNull
,以及 Array
的声明合并(定义 flatMap
方法)。 tsconfig-base.json
可以包含很多常用的设置,个人
tsconfig.json
s 可以定义与该子项目相关的设置(例如 React for
client/tsconfig.json
,Node for
server/tsconfig.json
)和
shared/
将在
client/
之间共享和
server/
.
shared/utils/type-utils.ts
不被
client/
看到或
server/
,但仅限于
shared/
.这会导致错误,例如
tsc -b client --verbose
产生
$ tsc -b client --verbose
15:31:41 - Projects in this build:
* shared/tsconfig.json
* client/tsconfig.json
15:31:41 - Project 'shared/tsconfig.json' is up to date because newest input 'shared/formatting/numbers.ts' is older than oldest output 'shared/formatting/numbers.js.map'
15:31:41 - Project 'client/tsconfig.json' is out of date because output file 'client/client/index.js' does not exist
15:31:41 - Building project 'C:/Users/KRyan/Web/5heet/client/tsconfig.json'...
client/index.tsx(32,29): error TS7006: Parameter 'skill' implicitly has an 'any' type.
client/index.tsx(80,37): error TS2339: Property 'flatMap' does not exist on type 'Ability[]'.
client/index.tsx(80,45): error TS7006: Parameter 'ability' implicitly has an 'any' type.
client/index.tsx(88,16): error TS7006: Parameter 'one' implicitly has an 'any' type.
client/index.tsx(88,21): error TS7006: Parameter 'another' implicitly has an 'any' type.
client/index.tsx(151,32): error TS7031: Binding element 'id' implicitly has an 'any' type.
client/parts/editing.tsx(31,60): error TS2339: Property 'oneOperand' does not exist on type 'never'.
client/parts/editing.tsx(31,81): error TS2339: Property 'operator' does not exist on type 'never'.
client/parts/editing.tsx(31,108): error TS2339: Property 'anotherOperand' does not exist on type 'never'.
client/parts/portal.tsx(55,61): error TS2304: Cannot find name 'Omit'.
shared/ability.d.ts(2,33): error TS2304: Cannot find name 'Id'.
shared/ability.d.ts(8,36): error TS2304: Cannot find name 'Id'.
shared/ability.d.ts(12,37): error TS2304: Cannot find name 'Id'.
shared/character.d.ts(3,35): error TS2304: Cannot find name 'Id'.
shared/expression.d.ts(7,35): error TS2304: Cannot find name 'Id'.
shared/expression.d.ts(30,38): error TS2304: Cannot find name 'ElementOf'.
shared/expression.d.ts(33,118): error TS2304: Cannot find name 'Id'.
shared/formatting/numbers.d.ts(1,41): error TS2304: Cannot find name 'Id'.
shared/skill.d.ts(3,31): error TS2304: Cannot find name 'Id'.
shared/utils/basic.d.ts(5,46): error TS2304: Cannot find name 'CouldBeNull'.
any
类型是由于无法找到输出后半部分列出的各种名称而直接导致的。
shared/utils/type-utils.d.ts
:
type PropsOf<T> = T[keyof T];
type ElementOf<T> = T extends (infer E)[] ? E : T;
type Subtract<T, U> = Pick<T, Exclude<keyof T, keyof U>>;
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type CouldBeNull<T> = null extends T ? unknown : never;
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends Array<infer U>
? Array<DeepPartial<U>>
: T[P] extends ReadonlyArray<infer U>
? ReadonlyArray<DeepPartial<U>>
: DeepPartial<T[P]>
};
declare class Tagged<Tag> {
private 'is tagged as': [Tag];
private dummy(): Tag;
}
type Id<Tag> = string & Tagged<Tag>;
interface Array<T> {
/**
* Calls a defined callback function on each element of an array. Then, flattens the result into
* a new array.
* This is identical to a map followed by a flatten of depth 1.
*
* @param callback A function that accepts up to three arguments. The flatMap method calls the
* callback function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callback function. If
* thisArg is omitted, undefined is used as the this value.
*/
flatMap<U, This = undefined>(
callback: (this: This, value: T, index: number, array: T[]) => U | U[],
thisArg?: This,
): U[];
}
tsconfig-base.json
:
{
"compileOnSave": true,
"compilerOptions": {
"target": "es2018",
"baseUrl": ".",
"module": "amd",
"moduleResolution": "classic",
"paths": {
"csstype": [
"node_modules/csstype/index"
],
},
"composite": true,
"declaration": true,
"declarationMap": true,
"noEmitOnError": true,
"strictNullChecks": true,
"allowJs": false,
"allowUnusedLabels": false,
"noImplicitAny": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noStrictGenericChecks": true,
"noUnusedLocals": true,
"noErrorTruncation": true,
"allowUnreachableCode": false,
"forceConsistentCasingInFileNames": false,
"preserveConstEnums": true,
"sourceMap": true
}
}
client/tsconfig.json
:
{
"extends": "../tsconfig-base.json",
"include": [
"**/*.ts"
],
"outDir": "../../built/client",
"compilerOptions": {
"rootDir": "..",
"jsx": "react",
"types": [
"react",
"react-dom"
]
},
"references": [
{
"path": "../shared"
}
],
"watch": true
}
server/tsconfig.json
:
{
"extends": "../tsconfig-base.json",
"include": [
"**/*.ts"
],
"outDir": "../../built/server",
"compilerOptions": {
"rootDir": "..",
"module": "commonjs",
"types": [
"node",
"mime-types"
]
},
"references": [
{
"path": "../shared"
}
]
}
shared/tsconfig.json
:
{
"extends": "../../tsconfig-base.json",
"include": [
"**/*.ts"
],
"outDir": "built/shared",
"compilerOptions": {
"module": "amd",
"types": []
}
}
最佳答案
想出了一个解决方案,尽管我对此并不感冒:client/tsconfig.json
:
{
"extends": "../tsconfig-base.json",
"include": [
"**/*.ts",
"**/*.tsx",
"../shared/utils/type-utils.d.ts"
],
"outDir": "../built/client",
"compilerOptions": {
"baseUrl": "..",
"rootDir": "..",
"jsx": "react",
"types": [
"react",
"react-dom"
]
},
"references": [
{
"path": "../shared"
}
],
"watch": true
}
../shared/utils/type-utils.d.ts
在
include
部分。这解决了问题。
shared/
中明确列出某些内容而不仅仅是作为项目引用的结果被包含在内。我对我必须手动更新我的
tsconfig.json
的想法感到不高兴s 为每个新
.d.ts
我要添加的文件
shared/
.但这是一个答案,因为该项目已构建,而且我不太可能添加更多我自己的
.d.ts
文件到项目,所以我的担忧可能是这个项目的哲学/理论。
关于typescript - tsconfig 和环境声明中的项目引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53543539/
我有两个项目:app 和 lib。 app 依赖于 lib。 app 是一个严格的 Typescript 项目,lib 不工作 严格。 我使用 Typescript 项目引用将它们连接在一起: ./t
当我尝试使用VITE安装Reaction with TypeScrip时,我在tsfig.json中遇到错误。这就是我面临错误的地方。。同样的代码库在我同事的PC上运行得很好,但我面临着这个问题。。为
typescript 版本: 1.8.30.0 问题 我们有许多网络项目的解决方案。我们最近创建了一个使用 tsconfig.json 文件的新项目。 这影响了其他项目,相信他们有一个 tsconfi
我们有一个这样的代码库设置: -A --utils ---index.ts --index.ts --tsconfig.json -B --utils ---index.ts --index.ts -
我是 Angular 的新手。我使用 angular-cli 了解 Angular,我找到了文件 tsconfig.json 和 tsconfig.app.json。这两个都与 typescript
我正在使用 Vite 创建 a new React + TypeScript project . 创建项目后,根文件夹下有两个 TypeScript 配置文件:tsconfig.json和 tscon
学习 TypeScript 和 Visual Studio 就是提示: Build: Failed to parse file 'C:/.../tsconfig.json/tsconfig.json'
请引用此 git 存储库:https://github.com/AngularClass/angular-starter Angular4 Webpack Starter 带有 2 个文件: tsco
**摘要:**原来在我们创建tsconfig.json文件的时候,VSCode会自动检测当前项目当中是否有TS文件;如果没有的话,就会报这个错提示我们去创建一个文件,再去使用。 本文分享自华为云社区《
我正在尝试将我的 Typescript 项目配置为具有以下目录结构: src/ ├── client/ │ └── tsconfig.json │ ├── server/ │ └── tsco
我想为每个脚本文件夹编译一个新的js文件夹。这可以用 tsconfig.json 实现吗? 目录 folder1 scripts index.ts folder2 scripts
我正在尝试了解 typescript 模块编译器选项。 我浏览了 typescript 文档 - docs 它说模块选项是 Specify module code generation . 这意味着什
在探索 tsconfig.json 文件时,我坚持理解 tsconfig.json 中增量的确切含义 最佳答案 通过将先前编译的信息读/写到磁盘上的文件来启用增量编译。该文件由 --tsBuildIn
不知道为什么,但在我刚刚创建的 tsconfig.js 文件中出现解析错误。来源:https://www.typescriptlang.org/docs/handbook/react-&-webpac
根据 TypeScript's docs ,在 types 中设置一个值将覆盖默认行为并且只查找我指定的类型: By default all visible ”@types” packages are
我现在很抓狂,为什么我的 typescript 编译 (tsc) 总是尝试编译 node_modules 文件,即使我已经指定排除这个文件夹。 [tl;dr;:这是因为我有导入但我不知道如何从编译中排
根据我的理解,我们可以分配值“commonjs”或“AMD”到 tsconfig.json 中的“模块”属性。 我们可以分配除这两个之外的任何其他值吗? .... .... { "compile
有人可以解释为什么这不会引发错误吗? interface A { id?: number; } const a:A = { id: 5 }; const testA: boolean
我正在尝试在我的 Angular 5 应用程序中使用仅在 JavaScript 语言中可用的 .js 文件,因此我在 TypeScript 中找不到替代方案。 问题是我添加了 "allowJs": t
我正在使用 create-react-app 并且我还有一些 ts 和 tsx 文件。在我的 tsconfig 文件(见下文)中,我将 noEmit 设置为 false,因为需要发出 js 文件。但是
我是一名优秀的程序员,十分优秀!