[英]How do I get a dynamic type from a dynamic array in typescript?
我已经搜索了一个解决方案并找到了 const 断言但是 Typescript 给了我一个类型错误,我只能在某些类型上使用 const 断言......可能是指我想要断言的数组没有设置在同一个文件中但是而是将由将使用我的模块的用户设置。 为了解释我的意思,我在下面有一些代码。
以下代码块以文件 HighLight.ts 为例。
type Languages = "javascript" | "typescript" | "json" | "java" | "kotlin" | "python";
export default class HighLight {
private languages: Languages | Languages[];
constructor({ languages }: { languages: Languages | Languages[] }) {
this.languages = <const>languages;
}
}
然后我将它导入到 index.ts 文件中
import HighLight from "HighLight.ts";
new HighLight(["javascript", "typescript"])
为了提供更多上下文,我想创建一个模块,它可以使用 highlight.js 突出显示代码,并将其作为纯字符串打印到控制台,本质上是 highlight.js 的端口,用于 nodejs 但纯粹用于控制台应用程序。
因为我希望我的实现仅在需要时导入所有语言(如 highlight.js),所以用户必须提供他们计划稍后突出显示的语言列表。 我已经弄清楚了导入部分,但我没有附加该代码,因为我认为它与这个问题无关。
顺便说一句,我想创建一个包含代码和语言的突出显示方法。 如果语言仅限于您在创建实例时为构造函数提供的语言,那就太好了。 我认为使用 const 断言是一项简单的任务,结果却很难。 在这种情况下,const 断言不起作用,因为此时数组/字符串未知,但稍后由用户在调用构造函数时设置...我还注意到,如果数组是静态类型的,但在不同的文件中是 const可悲的是断言也不起作用。
是否有不同的方法来为突出显示方法获取该类型?
type Languages = "javascript" | "typescript" | "json" | "java" | "kotlin" | "python";
export default class HighLight<L extends Languages> {
private languages: L | L[];
constructor({ languages }: { languages: L | L[] }) {
this.languages = languages;
}
}
let l = new HighLight({languages: 'javascript'})
// ^? let l: HighLight<"javascript">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.