Typescript 仅使用键创建Javascript对象,以实现类型安全的graphql查询
我使用一个graphql angular客户端和一个graphql ruby服务器,并希望构建一个类型安全系统,这样其他人就可以编写客户端查询,如果他们编写的查询不允许,就会出错。我不确定这是否真的有必要,但graphql模式位于服务器上。因此,在我的理解中,如果开发人员编写了一个无效的查询,客户机将其发送到服务器,在那里,查询将针对模式执行,客户机将收到一个错误,对吗?如果查询会导致错误,我希望客户端不要发送查询 为此,我编写了本课程:Typescript 仅使用键创建Javascript对象,以实现类型安全的graphql查询,typescript,graphql,apollo-client,type-safety,Typescript,Graphql,Apollo Client,Type Safety,我使用一个graphql angular客户端和一个graphql ruby服务器,并希望构建一个类型安全系统,这样其他人就可以编写客户端查询,如果他们编写的查询不允许,就会出错。我不确定这是否真的有必要,但graphql模式位于服务器上。因此,在我的理解中,如果开发人员编写了一个无效的查询,客户机将其发送到服务器,在那里,查询将针对模式执行,客户机将收到一个错误,对吗?如果查询会导致错误,我希望客户端不要发送查询 为此,我编写了本课程: export class RequestQL<re
export class RequestQL<request,response> extends Query<response> {
query:request;
constructor(apollo,query){
super(apollo);
this.query = query;
}
document=gql`${convertToString(this.query)}`;
}
然后我尝试编写一个函数(convertToString
),将该对象解析为graphql查询字符串,但我不想总是用不需要的随机值填充查询。
请求类型可能如下所示:
export interface ListGraphQlRequest {
list: {
id
name
slug?
programmingLanguageId
generatedFromId?
}
}
有人有解决这个问题的聪明办法吗?
我想要达到的目标:
-客户端不能向服务器发送无效的请求。
-开发人员应该直接识别他们是否编写了无效的查询
其他:
如果有人对convertToString()函数感兴趣,我们将:
convertToString(obj){
let str = "";
Object.keys(obj).forEach( key => {
if(typeof obj[key] === 'object'){
str += key;
str += this.convertToString(obj[key]);
}
else {
str += `${key}\n`
}
})
return `{\n${str}}`;
}
export interface ListGraphQlRequest {
list: {
id
name
slug?
programmingLanguageId
generatedFromId?
}
}
convertToString(obj){
let str = "";
Object.keys(obj).forEach( key => {
if(typeof obj[key] === 'object'){
str += key;
str += this.convertToString(obj[key]);
}
else {
str += `${key}\n`
}
})
return `{\n${str}}`;
}