小编Yev*_*sik的帖子

Gradle多项目自定义build.gradle文件名

我有一个多项目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)

有没有办法让它像这样工作?

build multi-project gradle

4
推荐指数
2
解决办法
4372
查看次数

Typescript 通过鉴别器属性将可区分联合类型的数组分组到记录中

我正在尝试编写通用“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”来了解可区分联合类型的具体类型?我想要这样的东西: …

discriminated-union typescript

4
推荐指数
1
解决办法
1573
查看次数