我正在尝试为每个数据库实例化一个续集。DB1 中的某些表与 DB2 中的表存在关系,反之亦然。其中一种关系是 DB1.Utilisateur.contenuProvenance_id => DB2.Contenu.id 和 DB2.Contenu.utilisateur_id => DB1.Utilisateur.id。
这是 Utilisateur 模型:
@Table
export default class Utilisateur extends Model<Utilisateur> {
@API() @PrimaryKey @AutoIncrement @Column({ type: DataType.INTEGER })
public id!: number;
@Column({ type: DataType.STRING, allowNull: false })
public email!: string;
@Column({ type: DataType.STRING, allowNull: false })
public nom!: string;
@ForeignKey(() => Utilisateur)
@Column({ type: DataType.INTEGER, allowNull: true })
public parrain_id?: number;
@ForeignKey(() => Contenu)
@Column({ type: DataType.INTEGER, allowNull: true })
public contenuProvenance_id?: number;
}
Run Code Online (Sandbox Code Playgroud)
(是的,我正在使用sequelize-typescript将我的模型声明为Typescript类)
以下是我的 Sequelize 实例的创建方式:
let …Run Code Online (Sandbox Code Playgroud) 给定一个类型标识符,我正在寻找一种方法来生成对象类型 AST 的完整树状结构。举例来说,如果我有:
文件1.ts
type Content = {
title: string,
image: string,
dims: number[]
}
Run Code Online (Sandbox Code Playgroud)
文件2.ts
type BlogPost = Pick<Content, 'title'|'image'>
type User {
name: string,
email: string,
news: BlogPost[]
}
Run Code Online (Sandbox Code Playgroud)
文件3.ts
const test: User = { ... };
Run Code Online (Sandbox Code Playgroud)
我的代码必须能够从用户标识符推断出如下列表:
name
email
news.title
news.image
Run Code Online (Sandbox Code Playgroud)
我通过使用 进行了几项实验checker.getTypeAtLocation,逐一迭代每个属性,找到正确的符号,并尝试推断属性的名称。
但我认为(希望)这种方法对于完成如此简单的事情来说太过分了,因为除了对象类型之外,我还必须处理属性的每种可能类型:Picks、Excludes、Array、Omit、KeyOf,...
我想要的只是类型的最终完整形式的属性列表。
所以我的问题是:
Typescript 编译器 API 是否提供工具来帮助我完成任务?举例来说,给定这样一个类型:
type Content = { title: string, id: number }
type Hello = Pick< Content, 'id' >
Run Code Online (Sandbox Code Playgroud)
生成最终完整的 AST,如下所示:
type Hello = {
id: number
} …Run Code Online (Sandbox Code Playgroud)