Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Javascript 我应该在TypeScript中使用字符串文字作为返回值的类型吗?_Javascript_Typescript - Fatal编程技术网

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问题不在于如何获得构造函数的类名,而在于如上所示使用字符串文本作为返回类型的正确性。例如,我只对类似枚举的字符串使用字符串文本类型(即字符串从接受值的有限列表中获取一个值)。它没有忽略它,因为当我将不同的字符串作为返回类型时,它显示了一个错误。请看这个