Подтвердить что ты не робот

Typescript примитивные типы: любая разница между типами "число" и "число" (нечувствительна к регистру TSC)?

Я хотел написать параметр типа number, но я ошибся с типом, написав number.

В моей среде IDE (JetBrains WebStorm) тип number написан с тем же цветом, который используется для примитивного типа number, тогда как если я напишу имя класса (известного или неизвестного), он использует другое цвет, поэтому я предполагаю, что каким-то образом он распознает шрифт с ошибками как правильный/почти правильный или сортировочный тип.

Когда я компилирую код, вместо того, чтобы жаловаться, например, что компилятор не смог найти класс с именем number, TSC записывает это сообщение об ошибке:

Illegal property access

Означает ли это, что number и number оба сосуществуют как разные типы?

Если это так, то какая разница между этими классами?

Если это не так, то почему он просто не написал то же сообщение об ошибке, которое он отображает для неизвестных классов ( "Имя" Номер "не существует в текущей области" )

Это код:

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]; 
    }
}
4b9b3361

Ответ 1

В JavaScript есть понятие примитивных типов (число, строка и т.д.) и типы объектов (Number, String и т.д., которые проявляются во время выполнения). Типы TypeScript number и number относятся к ним, соответственно. JavaScript обычно принуждает тип объекта к его примитивному эквиваленту или наоборот:

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

Системные правила типа TypeScript относятся к этому (раздел 3,7 раздела) следующим образом:

Для определения подтипа, супертипа и назначения совместимости, примитив Number, Boolean и String типы рассматриваются как типы объектов с теми же свойствами, что и 'Number,' Boolean и 'String соответственно.

Ответ 2

Чтобы увеличить ответ Райана с помощью TypeScript Do and Do'ts:

Никогда не используйте типы Number, String, Boolean или Object. Эти типы относятся к не примитивным коробчатым объектам, которые почти никогда не используются надлежащим образом в JavaScript-коде.

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

Использовать номера типов, строки и логические значения.

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