想象我有一個查詢類和這樣的執行方法:我可以在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