typescript 当我有一个普通的字符串时,我如何调用一个接受字符串文字并集的方法?

lbsnaicq  于 2022-11-26  发布在  TypeScript
关注(0)|答案(1)|浏览(122)

在下列TypeScript函数宣告中,alignment参数型别是一组联合常值。

function printText(s: string, alignment: "left" | "right" | "center") {
  // ...
}

根据文字文档,string类型的变量不能赋值给alignment,因为严格地说它不是"left" | "right" | "center"类型。
文档要求使用如下类型Assert:

printText("Test", printerConfig.textAlignment as "left");

这样也行:

const printerConfig = { textAlignment: "left" } as const;

printText("Test", printerConfig.textAlignment);

现在想象一下:

  1. printText函数在库中,我无法更改它。
    1.我的代码被传递了一个printerConfig对象,或者它从JSON配置文件中读取它。
    1.其textAlignment属性的类型为string
    如何调用printText函数?
rxztt3cl

rxztt3cl1#

我认为如果alignment不是一个合理的值,您就不会想调用printText-如果代码的调用者传递了一个错误的config对象,或者JSON的格式不正确呢?您可能想在调用printText之前抛出一个错误。
在传递textAlignment之前缩小它的类型。如果它不是正确的类型,则抛出错误。

// have checks of textAlignment narrow this new variable
const { textAlignment } = printerConfig;
if (textAlignment !== 'left' && textAlignment !== 'right' && textAlignment !== 'center') {
  throw new Error(`Invalid textAlignment: ${textAlignment}`);
}
printText("Test", textAlignment);

相关问题