我有一个多项目Gradle构建,目前通过单个build.gradle文件进行配置.
这个项目中有70多个模块,单个(巨大的)build.gradle文件使用起来很麻烦,所以我想将它拆分成小的每个模块的buildscript文件.
现在,我不想拥有70个小的build.gradle文件(每个模块中有一个),因为这会导致导航到特定的build.gradle IDE中的痛苦(文件之间的唯一区别就是它们的路径).
我想要的是我的每个模块的buildscript文件以模块名称命名.
而不是这个:
root
|--foo\
|--| build.gradle
|--bar\
|--| build.gradle
Run Code Online (Sandbox Code Playgroud)
我要这个:
root
|--foo\
|--| foo.gradle
|--bar\
|--| bar.gradle
Run Code Online (Sandbox Code Playgroud)
由于这似乎没有得到官方支持,我尝试了一下root build.gradle,但似乎在配置项目之前应用.gradle文件,所以这给依赖于其他项目的项目带来了错误项目:
在root build.gradle中:
subprojects { subProject ->
rootProject.apply from: "${subProject.name}/${subProject.name}.gradle"
}
Run Code Online (Sandbox Code Playgroud)
foo.gradle,它不是标准的build.gradle文件:
project('foo') {
dependencies {
compile project(':bar')
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让它像这样工作?
我正在尝试编写通用“groupBy”函数的打字稿签名,该函数会将可区分的类型联合数组“传播”到记录中,其中记录的每个字段都是可能的鉴别器值,并指向具体的对象数组来自工会的类型。
例子:
interface Dog {
type: 'dog'
dogMetadata: {}
}
interface Cat {
type: 'cat'
catMetadata: {}
}
type Animal = Dog | Cat
const animals: Animal[] = [{ type: 'dog', dogMetadata: {} }, { type: 'cat', catMetadata: {} }]
Run Code Online (Sandbox Code Playgroud)
每个接口都有一个公共鉴别器属性,没有其他公共属性。
这是简单的“groupBy”签名,它不会传播类型联合值,迫使我向下转换记录的值:
function groupBy<T, K extends string>(arr: T[], keyExtractor: (element: T) => K): Record<K, T[]>
const animalsByType: Record<'dog' | 'cat', Animal[]> = groupBy(animals, it => it.type)
const dogs: Dog[] = animalsByType['dog'] as Dog[] // Must downcast Animal[] to Dog[]
Run Code Online (Sandbox Code Playgroud)
如何制作一个“groupBy”来了解可区分联合类型的具体类型?我想要这样的东西: …