想象我有一个查询类和这样的执行方法:我可以在Typescript中使用`keyof`来静态描述我想返回的这种类型的属性吗?
class Query {
name: string;
sql: string;
}
function execute(query: Query): any{
let retVal = {};
retVal[query.name] = true;
return retVal;
}
q = new Query();
q.name = "thisIsMyQueryName";
let result = execute(q); // Returns: {thisIsMyQueryName: true}
// `typeof result` is still `any` of course, but I'd like it to be:
// {thisIsMyQueryName: boolean}
在这种情况下,我在返回对象具有基于我传递给它的类的实例的形状。显然,由于查询的“名称”在运行时可能会有所不同,因此我无法告诉编译器,以便它知道返回的对象将具有名为“thisIsMyQueryName”的属性。
但是,我想我可能会做些什么来使这个更加静态分析。我们有很多这些“查询”对象,当我们在代码中实例化它们时,我们知道它们的名字。我正在试验key of
的不同咒语,我有一些有希望的东西,但没有我很满意。
能够做到这将是理想的:
let q = {
sql: "",
queryName: {
thisIsMyQueryName: ""
}
}
let result = execute(q); // Returns: {thisIsMyQueryName: true}
// typeof result == {thisIsMyQueryName: boolean}
同样,我明白我只是写是不可能的,但我想必须有描述在某些方面,这些各种实例的方式,编译器将知道返回类型具有名称keyof q.queryName
任何想法?
顺便说一句,'返回{[query.name]:真};' – SLaks