簡體   English   中英

從標記的模板文字 Function 參數推斷類型

[英]Infer Types from Tagged Template Literal Function argment

我想從標記模板文字 function 中的通用參數中獲取類型。

但 typescript 無法從參數“模板”中讀取。 它只是將類型讀取為 TemplateStringsArray。

const tag = <T extends ReadonlyArray<string>>(template: T, ...args: string[]) => {
  return {template, args};
};

const a = tag`hello ${'world'}`;
/**

const a: {
    template: TemplateStringsArray;
    args: string[];
}
*/

有什么方法可以將template理解為['hello ', '']嗎?

這里的主要問題是TemplateStringsArray沒有參數化。 看到這個問題

但是你仍然可以推斷出除了模板字面量 function 的第一個參數之外的所有參數:

const tag = <
    Elem extends string,
    Template extends ReadonlyArray<Elem>,
    Arg extends string,
    Args extends Arg[]
>(template: Template, ...args: [...Args]) => ({ template, args })

// const a: {
//     template: TemplateStringsArray;
//     args: ["world", "kiwi"];
// }
const a = tag`hello ${'world'} ${'kiwi'}`;

操場

如果您想推斷整個字符串,您應該對每個單詞使用${}或使用帶有推斷字符串參數的常規 function。 如果您想了解有關 function arguments 類型推斷的更多信息,您可以查看我的文章

PS 如果你對這個功能感興趣,請點贊:上期

暫無
暫無

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

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