Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在TypeScript中将类名作为类型获取_Typescript_Types_String Literals_Template Literals - Fatal编程技术网

在TypeScript中将类名作为类型获取

在TypeScript中将类名作为类型获取,typescript,types,string-literals,template-literals,Typescript,Types,String Literals,Template Literals,在TypeScript 4.1中,是否可以将类名或函数名作为文本字符串类型 e、 g class Foo{} 键入Tpl=`${Foo[“name”]}${“a”|“b”|“c”}`//错误 //应该是 //“Foo_a”|“Foo_b”|“Foo_c” 编辑(扩展用例) 由于第一个示例不够明确,可以用“Foo_a”|“Foo_b”|“Foo_c”作为类型来解析,这里是另一个示例 类动物{/*代码*/} 类狗扩展动物{} 类Cat扩展了动物{} 类{} //另外,我的原始代码之外的人决定实现

在TypeScript 4.1中,是否可以将类名或函数名作为文本字符串类型

e、 g

class Foo{}
键入Tpl=`${Foo[“name”]}${“a”|“b”|“c”}`//错误
//应该是
//“Foo_a”|“Foo_b”|“Foo_c”
编辑(扩展用例) 由于第一个示例不够明确,可以用
“Foo_a”|“Foo_b”|“Foo_c”
作为类型来解析,这里是另一个示例


类动物{/*代码*/}
类狗扩展动物{}
类Cat扩展了动物{}
类{}
//另外,我的原始代码之外的人决定实现另一个
//动物,等等。(例如,“MyAwesomeChimera”)
类MyAwesomeChimera扩展了动物{}
//“尝试”提取名称
键入GetName=T[“name”];//现在返回字符串
//这里的目标是,无论出于什么原因,
//使用模板文字预验证查询字符串
//使用类名的
类型ClassQueryTemplate=
`CQT${GetName}---CALL()`;
功能查询器(…动物:T):
(query:ClassQueryTemplate)=>void{/*code*/返回null作为任意;}
//导入与使用
const query=queryer(
狗,
鸭子
MyAwesomeChimera,
猫,
);
//测验
查询(`CQT Duck--CALL()`);//好的,但是没有自动完成
查询(`CQT Dog---CALL()`);//好的,但是没有自动完成
查询(`CQT Cat---CALL()`);//好的,但是没有自动完成
查询(`CQT MyAwesomeChimera--CALL()`);//好的,但是没有自动完成
查询(`CQT Horse--CALL()`);//好的,但应该是错误的
//基本上,查询字符串的类型为:`CQT${string}---CALL()`
//这是不好的


我看到了运营商建议的“名称”,我希望这不是“答案”。

为什么。。。你为什么要这样做?在编写代码时,类型必须严格称为文本值。试图用文字来计算它们是行不通的,也不会有用。为什么不直接编写
类型Tpl=“Foo_a”|“Foo_c”|“Foo_b”
?这样做并不能真正节省时间和精力。@jered我添加了一个更具体的例子,这在4.1测试版中是可能的:@ccarton Well。。模板文字类型,是的,我知道,这就是为什么我以“在TypeScript 4.1中…”开始提问的原因;遗憾的是,在Daniel的帖子中,我找不到关于类名称的文字类型。我认为这是不可能的,因为
Function.name
variable是string类型的,TypeScript并没有为每个特定的函数或类将此函数设置为string-literal类型。带有模板字符串的解决方案肯定不起作用,因为它们只存在于TS 4.1中。我看到的唯一选项是将
Animal
类抽象化,并声明一个抽象字段
name
,但它仍然是
string
类型,而不是常量类型。我很确定这是不可能做到的,也许你必须重新思考一下你的解决方案,或者没有自动完成的生活为什么。。。你为什么要这样做?在编写代码时,类型必须严格称为文本值。试图用文字来计算它们是行不通的,也不会有用。为什么不直接编写
类型Tpl=“Foo_a”|“Foo_c”|“Foo_b”
?这样做并不能真正节省时间和精力。@jered我添加了一个更具体的例子,这在4.1测试版中是可能的:@ccarton Well。。模板文字类型,是的,我知道,这就是为什么我以“在TypeScript 4.1中…”开始提问的原因;遗憾的是,在Daniel的帖子中,我找不到关于类名称的文字类型。我认为这是不可能的,因为
Function.name
variable是string类型的,TypeScript并没有为每个特定的函数或类将此函数设置为string-literal类型。带有模板字符串的解决方案肯定不起作用,因为它们只存在于TS 4.1中。我看到的唯一选项是将
Animal
类抽象化,并声明一个抽象字段
name
,但它仍然是
string
类型,而不是常量类型。我很确定这是不可能的,也许你必须重新思考一下你的解决方案,或者生活在没有自动完成的环境中