有人知道TypeScript中String和String的区别吗?我假设它们应该是一样的,对吗?

var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!

当前版本的编译器说:

Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object.
     Prefer using 'string' when possible.

那是虫子吗?


当前回答

对于快速阅读者:

不要使用数字、字符串、布尔、符号或对象类型。这些类型指的是非原始的盒装对象,在JavaScript代码中几乎从来没有适当使用过。(强调我的)

来源: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

其他回答

对于快速阅读者:

不要使用数字、字符串、布尔、符号或对象类型。这些类型指的是非原始的盒装对象,在JavaScript代码中几乎从来没有适当使用过。(强调我的)

来源: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

TypeScript:字符串vs字符串

String类型的实参不能赋值给String类型的形参。 'string'是一个原语,但'string'是一个包装器对象。 尽可能使用'string'。

demo

字符串对象

// error
class SVGStorageUtils {
  store: object;
  constructor(store: object) {
    this.store = store;
  }
  setData(key: String = ``, data: object) {
    sessionStorage.setItem(key, JSON.stringify(data));
  }
  getData(key: String = ``) {
    const obj = JSON.parse(sessionStorage.getItem(key));
  }
}

字符串的原始

// ok
class SVGStorageUtils {
  store: object;
  constructor(store: object) {
    this.store = store;
  }
  setData(key: string = ``, data: object) {
    sessionStorage.setItem(key, JSON.stringify(data));
  }
  getData(key: string = ``) {
    const obj = JSON.parse(sessionStorage.getItem(key));
  }
}

简单的回答是:

String =>是一个类型。例如console.log(typeof 'foo') //字符串 String =>是一个具有一些创建和操作字符串的方法的对象。

下面是一个例子,它显示了两者的区别,这将有助于解释。

var s1 = new String("Avoid newing things where possible");
var s2 = "A string, in TypeScript of type 'string'";
var s3: string;

String是JavaScript的String类型,您可以使用它来创建新的字符串。没有人这样做,因为在JavaScript中文字被认为更好,所以上面例子中的s2创建了一个新的字符串,没有使用new关键字,也没有显式地使用string对象。

string是TypeScript的字符串类型,你可以用它来输入变量、参数和返回值。

额外的笔记……

目前(2013年2月)s1和s2都是有效的JavaScript。s3是有效的TypeScript。

字符串的使用。你可能永远不需要使用它,字符串字面量被普遍接受为初始化字符串的正确方式。在JavaScript中,使用对象字面值和数组字面值也被认为更好:

var arr = []; // not var arr = new Array();
var obj = {}; // not var obj = new Object();

如果你真的很喜欢字符串,你可以在TypeScript中以以下两种方式之一使用它……

var str: String = new String("Hello world"); // Uses the JavaScript String object
var str: string = String("Hello World"); // Uses the TypeScript string type

根据我个人的推荐

string是JavaScript中的一种类型。 字符串;在JavaScript中,所有的字符串都表示为String类的一个实例。阅读这篇短文,了解更多关于String类的知识

优先选择字符串而不是字符串