Typescript 기본 유형 : "숫자"유형과 "숫자"유형간에 차이가 있습니까 (TSC는 대소 문자를 구분하지 않음)?


91

유형 매개 변수를 작성하려고 number했지만 유형을 잘못 입력하여 Number대신 작성 했습니다.

내 IDE (JetBrains WebStorm)에서 유형 Number은 기본 유형에 사용되는 것과 동일한 색상으로 작성 number되지만 클래스 이름 (알려 졌거나 알려지지 않음)을 쓰면 다른 색상을 사용하므로 어떻게 든 인식 할 수 있습니다. 철자가 틀린 유형을 올바른 / 거의 정확한 / 정확한 유형으로.

예를 들어 컴파일러 Number가라는 클래스를 찾을 수 없다고 불평하는 대신 코드를 컴파일 할 때 TSC는 다음 오류 메시지를 작성합니다.

Illegal property access

그것은 그것 numberNumber둘 다 다른 유형으로 공존 한다는 것을 의미합니까 ?

이것이 사실이라면 그 클래스의 차이점은 무엇입니까?

그렇지 않은 경우 알 수없는 클래스에 대해 표시되는 것과 동일한 오류 메시지를 작성하지 않은 이유입니다 ( "현재 범위에 '번호'이름이 없습니다.").

다음은 코드입니다.

class Test
{
    private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];

    // THIS WORKS
    public getValue(index:number):string
    {
        return this.myArray[index];
    }

    // THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
    public getAnotherValue(index:Number):string
    {
        return this.myArray[index]; 
    }
}

답변:


57

JavaScript에는 기본 유형 (숫자, 문자열 등)과 객체 유형 (런타임에 매니페스트되는 숫자, 문자열 등) 의 개념이 있습니다 . TypeScript 유형을 지정 number하고 Number각각 참조하십시오. 자바 스크립트는 일반적으로 객체 유형을 해당 기본 유형으로 강제 변환하거나 그 반대의 경우도 마찬가지입니다.

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35

TypeScript 유형 시스템 규칙은이를 다음과 같이 처리합니다 (사양 섹션 3.7).

하위 유형, 상위 유형 및 할당 호환성 관계를 확인하기 위해 Number, Boolean 및 String 기본 유형은 각각 'Number', 'Boolean'및 'String'인터페이스와 동일한 속성을 가진 객체 유형으로 처리됩니다.


8
하나는 정확히 교차 할당 할 수없는 것을 추가 할 수 있습니다 : typescriptlang.org/Playground/...
basarat

5
또한 원래 포스터에 대답 : 예 TSC는 (자바 스크립트 등) 대소 문자를 구분합니다 :)입니다
basarat

115

TypeScript Do 's and Don'ts의 지침으로 Ryan의 답변을 보강하려면 다음을 수행하십시오.

하지 마십시오 적 유형을 사용 Number, String, Boolean, Symbol, 또는 Object이 유형은 거의 자바 스크립트 코드를 적절하게 사용되지 않습니다 비 원시적 박스 객체를 참조하십시오.

/* WRONG */
function reverse(s: String): String;

유형을 사용 number, string, boolean,와 symbol.

/* OK */
function reverse(s: string): string;

2
@atilkan 재밌 네요. 나는 그들이 그들 자신의 조언을 받아들이지 않는 것 같다.
Shaun Luttin

1
@RyanCavanaugh 우리가 이것을보고해야한다고 생각합니다.
atilkan

3
@ShaunLuttin 배열은 어떻습니까? 소문자 예를 찾을 수 없습니다.
atilkan

3
@atilkan 아마도 []배열 유형을 나타 내기 위해를 사용해야 합니다. 하지만 예외가있을 수 있지만 확실하지 않습니다.
빅터 Zamanian

1
> - @VictorZamanian 좋은 설명은 여기에 있습니다 toddmotto.com/typing-arrays-typescript
atilkan

1

TypeScript 문서에 따르면 다음과 같습니다.

var Number: NumberConstructor
(value?: any) => number

모든 종류의 숫자를 나타내는 개체입니다. 모든 JavaScript 숫자는 64 비트 부동 소수점 숫자입니다.

말했듯이 any매개 변수로 취하고 숫자를 반환하거나null

값이 숫자인지 아닌지 쉽게 확인할 수 있습니다.

Number("1234");   // 1234
Number("1234.54") // 1234.54
Number("-1234.54") // -1234.54
Number("1234.54.33") // null
Number("any-non-numeric") // null

따라서 다음과 같이 번호를 확인하는 데 사용할 수 있습니다.

if(Number(val)){
   console.log('val is a number');
} else {
   console.log('Not a number');
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.