Javascript 我应该在TypeScript中使用字符串文字作为返回值的类型吗?
我有如下实用方法:Javascript 我应该在TypeScript中使用字符串文字作为返回值的类型吗?,javascript,typescript,Javascript,Typescript,我有如下实用方法: private static getClassName(): 'my-component-class-name' { return 'my-component-class-name' } 我使用精确的返回值作为返回类型,TypeScript正确地编译它,没有错误 使用这种方法是一种好的做法,还是应该将string放在那里 为了确保它不会被忽略,我尝试了这一步,typescript显示了一个错误: private static getClassName(): 'my-
private static getClassName(): 'my-component-class-name' {
return 'my-component-class-name'
}
我使用精确的返回值作为返回类型,TypeScript正确地编译它,没有错误
使用这种方法是一种好的做法,还是应该将string
放在那里
为了确保它不会被忽略,我尝试了这一步,typescript显示了一个错误:
private static getClassName(): 'my-component-class-name' {
return 'wrong-value'
}
以下是错误:
类型“错误值”不可分配给类型“我的组件类名”
使用此代码键入脚本。不推荐
TypeScript是类型清除脚本,您应该使用显式类型作为返回类型
TypeScript编译器将从字符串literal'my-component-class-name'
为getClassName()
创建一个返回类型,它是一个类型别名,等于type returnType='my-component-class-name'
,并将returnType
设置为getClassName()
的返回类型。但是,返回的“错误值”
是类型的“错误值”
s类型,它是字符串
类型,不等于定义的返回类型
如果您想让代码成功构建,只需在'my-component-class-name'
之后添加| string
。这是一种联合型的
代码片段:
type returnType = "my-component-class-name";
var value: returnType = "my-component-class-name";
type returnType1 = "my-component-class-name" | string;
var value1: returnType1 = "union type";
type returnType2 = true;
var value2 : returnType2 = true;
type returnType3 = 1;
var value3: returnType3 = 1;
class A {
public static getClassName(): returnType {
return value;
}
public static getClassName1(): returnType1 {
return value1;
}
public static getClassName2(): returnType2 {
return value2;
}
public static getClassName3(): returnType3 {
return value3;
}
}
console.log(A.getClassName());
console.log(A.getClassName1());
console.log(A.getClassName2());
console.log(A.getClassName3());
输出为:
my-component-class-name
union type
true
1
类型别名doc:。如另一个答案中所述,编译器将忽略您的返回类型。未来的编译器可能不会这么宽容。如果你真的想声明一个常量,为什么不使用常量而不是函数呢?或者,由于您需要类名
编辑后添加:正如该答案上的注释所指出的,myObj.constructor.name
可能无法在缩小或其他类损坏后存活。我以前在TypeScript中做过类似于getClassName
函数的事情,但当我更仔细地思考为什么要使用这个名称时,我最终重构了它们。很有可能,您希望调用一些在JavaScript中没有很好定义的特性,这些特性在将类转换为接口或mixin的重构中无法存活。因此,请考虑调用代码<代码> GETXXXType < /代码>其中<代码> xxx < /Cord>描述您最感兴趣的质量,例如:<代码> GETNICTICAL操作类型< /COD>,<代码> GETDATEFALTIGIN类型,<代码> GTHIPACRITCICATION类型等等。当你发现你的课程已经开始时,这也会给你喘息的空间来添加不同类型的课程。我从来没有见过这样的课程。我会坚持使用字符串,但这不仅仅是因为我不知道使用您的语法会带来什么好处
您可以从这里获得getClassName
:。@serveryang问题不在于如何获得构造函数的类名,而在于如上所示使用字符串文本作为返回类型的正确性。例如,我只对类似枚举的字符串使用字符串文本类型(即字符串从接受值的有限列表中获取一个值)。它没有忽略它,因为当我将不同的字符串作为返回类型时,它显示了一个错误。请看这个