根据我对集合论的了解,当您取两个集合的并集时,您会覆盖两个集合并取结果集。当你取两个集合的交集时,你将两个集合重叠并取彼此重叠的部分。
对于数字,这很好用:
type SomeUnion = (1 | 2 | 3) | (2 | 3 | 4)
const someUnion: SomeUnion // typeof someUnion is 1 | 2 | 3 | 4
type SomeIntersect = (1 | 2 | 3) & (2 | 3 | 4)
const someIntersect: SomeIntersect // typeof someIntersect is 2 | 3
Run Code Online (Sandbox Code Playgroud)
对于对象键,在我看来,交集和联合操作的工作非常不直观。
type ObjUnion = { one: string, two: string } | { two: string, three: string }
const objUnionKeys: keyof ObjUnion // typeof objUnionKeys is 'two' …Run Code Online (Sandbox Code Playgroud) 我想制作一个Tabs组件,active根据其子项作为name道具的内容推断道具的可能值。这就是我尝试这样做的方式:
import React from 'react'
interface TabProps<N extends string> {
name: N
}
function Tab<N extends string>(props: TabProps<N>) {
return null
}
type TabsType<N extends string = string> =
| React.FunctionComponentElement<TabProps<N>>
| React.FunctionComponentElement<TabProps<N>>[]
interface TabsProps<Tabs extends TabsType> {
children: Tabs
active: Tabs extends TabsType<infer N> ? N : unknown
}
export function Tabs<Tabs extends TabsType>(props: TabsProps<Tabs>) {
return null
}
const test = (
{/* I want active to be inferred as type 'bla' …Run Code Online (Sandbox Code Playgroud) 我正在使用 typeORM 并且我想使用迁移而不是同步,因为我在一个团队中工作,实际上要让数据库进入应用程序实际运行的状态需要很多繁琐的工作。
问题是我在迁移中指定的每个列名都被转换为小写,我已经通过使所有实体道具snake_case(顺便说一句,这太可怕了)解决了这个问题。但是默认情况下,外键会通过(我认为)postgres 转换为驼峰式大小写,因此我无法在迁移中通过外键将任何内容相互关联。(因为它需要是驼峰式,但查询被转换为小写)
我有没有说清楚我的问题是什么?
有没有办法解决这个问题,或者有没有解决方法?
我正在尝试将我的 Vesper 服务器部署到 Heroku,而 Vesper 需要一个 ormconfig.json 文件。
当我使用本地数据库时,这很好用,因为我可以填写将组合到连接字符串中的所有字段。但是,当我在 Heroku 中添加一个 db 时,我只得到了完整的 url,我找不到把它放在哪里。
这是我现在的 ormconfig.json。
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "password",
"database": "test",
"synchronize": true,
"entities": ["target/entity/**/*.js"],
"migrations": ["target/migrations/*.js"],
"cli": {
"migrationsDir": "src/migrations"
}
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以只用 database_url 替换大多数字段,但我找不到任何说明我应该用什么名称命名的文档。