簡體   English   中英

從字符串參數推斷返回類型

[英]Infer return type from string parameter

假設我有一個 function 有點像這樣

function getObjectFromString(str: string): { loading: boolean, [key: string]: any } {
    const result = {
        loading: false,
    };

    // Set the value of the key based on the input string
    result[str] = true;

    return result;
}

如果我這樣使用

const obj = getObjectFromString('foo');

// obj has the following properties:
// - loading: false
// - foo: true

obj的類型是{ loading: boolean, [key: string]: any}有沒有什么辦法可以讓 object 的類型是{ loading: boolean, foo: any}相反,對於任何給定的字符串值?

我瀏覽了 typescript 文檔,沒有找到任何有用的東西

我認為確保鍵的文字類型並將結果轉換為正確的類型應該可行:

type StringLiteral<T> = T extends string ? string extends T ? never : T : never;

function getObjectFromString<T extends string>(str: StringLiteral<T>) {
    return {
        loading: false,
        [str]: true,
    } as { [ x in T]: boolean } & { loading: boolean };
}

const obj1 = getObjectFromString('test1');
obj1.test1 = false;
obj1.test2 = 'error expected';
const test2: string = 'does not work';
const obj2 = getObjectFromString(test2);

游樂場鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM