簡體   English   中英

TypeScript 通用參數

[英]TypeScript Generic Parameters

我正在嘗試使我的日志方法具有通用性。 我需要的主要概念如下:

class A {
    user_id: number;
    // and some other props...
}

class B {
    service_name: string;
    // and some other props...
}

function log<T>(...T parameters) {
    // logging the input parameters
}

log<A>(
    A.user_id = 123
);

log<B>(
    B.service_name = 'my_service_name';
);

到目前為止我嘗試過的內容如下,但我無法使其正常工作。 我這樣做是因為我的項目越來越大,而且每天都會添加更多的關卡和條目。

enum levels {
    error,
    info,
}

enum entries {
    user_id,
    service_name,
}

function log(level: levels, ...entries: entries[]) {
    // perform the actual log...
}

log(
    levels.info,
    entries.user_id = 123
);

log(
    levels.error,
    entries.service_name = 'my_sevice_name'    
);

我在示例中使用枚舉的原因是我想強制開發人員從列表中選擇預定義的值,而不是使用幻數或幻字符串。

是否像使用聯合定義鍵一樣簡單?

type Level = "error" | "info"

type EntryKey = "user_id" | "service_name"

type Entry = Partial<{
  [K in EntryKey]:string
}>

function log(level: Level, ...entries: Entry[]) {
    // perform the actual log...
}

log("error", {service_name:"something"})

如果您希望您的第二個解決方案“工作”,您必須將 function 調用更改為:

enum levels {
    error,
    info,
}

interface entry {
    user_id,
    service_name,
}

function log(level: levels, ...entries: entry[]) {
    // perform the actual log...
}

log(
    levels.info,
    { user_id: 123 }
);

log(
    levels.error,
    { service_name: 'my_sevice_name' }
);

暫無
暫無

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

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