2013-02-06 3 views
97

누구나 TypeScript의 문자열과 문자열의 차이점을 알고 있습니까? 나는 그들이 똑같아 야한다고 가정하여 바른가?Typescript : 문자열과 문자열의 차이

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. 

버그인가요?

답변

91

다음은 설명을 돕는 차이점을 보여주는 예입니다.

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

String

사용이 새로운 문자열을 생성 할 수있는 자바 스크립트 문자열 유형이다. JavaScript 에서처럼 리터럴을 더 잘 사용하는 사람은 없으므로 위의 예에서 s2은 키워드를 사용하지 않고 명시 적으로 String 개체를 사용하지 않고 새 문자열을 만듭니다.

string은 변수, 매개 변수 및 반환 값을 입력하는 데 사용할 수있는 TypeScript 문자열 유형입니다.

추가 참고 ... 현재

(년 2 월 2013) s1s2 모두 자바 스크립트 유효합니다. s3은 유효한 TypeScript입니다.

String의 사용. 문자열 리터럴은 문자열을 초기화하는 올바른 방법으로 널리 받아 들여지고 있습니다. 자바 스크립트, 또한 객체 리터럴 너무 배열 리터럴을 사용하는 것이 좋습니다 간주됩니다

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

당신이 정말로 문자열을 좋아하는 경향이 있다면, 당신은 ... 두 가지 방법 중 하나를 타이프에서 사용할 수

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

고맙습니다. 따라서 primitve 유형 문자열을 사용하여 문자열 값을 사용하는 다른 libs를 사용할 때 유형 변환 문제를 피할 수 있습니다 (아무도 실제로 String (?)을 사용하지 않는다는 생각을 기반으로 함). String과 String, viceversa 사이의 대입은 똑같이 처리되어야합니까? – Paul0515

+1

실제로 TypeScript 유형을 제거하여 100 % 호환 JavaScript (ES3 또는 ES5 버전 및 ES6 버전 1 버전)를 제공하므로 실제로 둘 중 하나를 사용하는 것이 안전합니다. 나는'string' 타입과 리터럴 초기화를 사용할 것을 권한다 :'var s : string = "My String";'. – Fenton

+0

레코드에 대해, 타입 - 유추 덕분에,'var s : string = "My String"'은'var s = "My String"'과 동일하다. ('My String ') ['constructor '] === String' ... –

17

두 가지 유형은 JavaScript 에서뿐만 아니라 TypeScript 와도 다릅니다. TypeScript는 형식을 주석하고 확인하는 구문을 제공합니다.

String은 프로토 타입 체인에 String.prototype이있는 객체 인스턴스를 나타냅니다. 이러한 인스턴스는 다양한 방법으로 가져올 수 있습니다. new String('foo')Object('foo'). instanceof 연산자를 사용하여 String 유형의 인스턴스를 테스트 할 수 있습니다 (예 : myString instanceof String.

string은 JavaScript의 기본 유형 중 하나이며 string 값은 주로 리터럴을 사용하여 생성됩니다. 'foo'"bar"을 비롯하여 다양한 함수와 연산자의 결과 유형으로 사용됩니다. typeof myString === 'string'을 사용하여 유형을 테스트 할 수 있습니다.

대다수의 시간, 사용해야하는 유형은 string입니다. 문자열을 사용하거나 반환하는 거의 모든 API 인터페이스에서 사용합니다. 모든 JS 기본 유형은 해당 객체 유형을 객체로 사용할 때 해당 객체 유형과 함께 포장됩니다 (예 : boxed). 속성 또는 메서드 호출에 액세스합니다.String은 현재 TypeScript's core library의 클래스가 아닌 인터페이스로 선언되었으므로 구조체 타이핑은 의 하위 유형으로 간주되어 첫 번째 행이 컴파일 유형 검사를 통과하는 이유입니다.

관련 문제