переменная: <type>против переменной как <type>в машинописи - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в машинописи и мне интересно, чем отличается : <type> vs xxx as <type>? и как я должен знать, где использовать какой?

let abc: any = {}
let abc = {} as any

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Что это означает

Синтаксис variable: type называется аннотацией типа . В нем говорится, что переменная будет содержать значения указанного типа в течение всего времени его существования, и просит компилятор машинописного текста проверить, что это так.

Синтаксис expression as type называется утверждением типа . Он говорит, что вы знаете, что выражение даст значение этого типа, и просит компилятор поверить вам.

Почему существуют оба

Необходимы аннотации типов, потому что оно Можно объявить переменную без присвоения ей значения, а также потому, что можно назначить новое значение позже, поэтому изначально присвоенное значение может не отражать всех значений, которые будет иметь переменная в течение всего времени ее жизни.

Утверждения типа необходимы в том случае, если программист действительно знает о типе больше, чем компилятор.

Какой использовать?

Вообще говоря, вы должны отдавать предпочтение типу аннотации, так что компилятор проверяет, правильно ли вы, и обнаруживает больше ошибок. Например, рассмотрим:

let person: Person = {}; // error: property name is missing

против

let person = {} as Person; // the compiler believes you
person.name.toUpperCase(); // runtime error because name is undefined

Однако иногда вы действительно можете знать больше, что делает компилятор, и в этом случае только утверждение типа поможет понять (хотя есть почти всегда лучшие пути).

Приложение: Избегайте any

Пока мы говорим о передовой практике, вам следует избегать any всякий раз, когда возможно, потому что он также обходит проверки типов:

let obj: any = {}; // totally correct
let person: Person = obj; // compiler believes you, because any is special
person.name.toUpperCase(); // runtime error, because name is undefined
0 голосов
/ 23 апреля 2020

Первый называется аннотацией типа, а второй называется утверждением типа, и в этом случае между этими понятиями нет никакой разницы.

...