typescript
GitHub
  • README
  • Давайте Почнемо
    • Why TypeScript
  • JavaScript
    • Equality
    • References
    • Null vs. Undefined
    • this
    • Closure
    • Number
    • Truthy
  • Future JavaScript Now
    • Classes
      • Classes Emit
    • Arrow Functions
    • Rest Parameters
    • let
    • const
    • Destructuring
    • Spread Operator
    • for...of
    • Iterators
    • Template Strings
    • Promise
    • Generators
    • Async Await
  • Проект / Project
    • Контекст компіляції / Compilation Context
      • tsconfig.json
      • Які файли / Which Files?
    • Простори Оголошень / Declaration Spaces
    • Модулі / Modules
      • File Module Details
      • global.d.ts
    • Namespaces
    • Dynamic Import Expressions
  • Node.js QuickStart
  • Browser QuickStart
  • Library QuickStart
  • TypeScript's Type System
    • JS Migration Guide
    • @types
    • Ambient Declarations
      • Declaration Files
      • Variables
    • Interfaces
    • Enums
    • lib.d.ts
    • Functions
    • Callable
    • Type Assertion
    • Freshness
    • Type Guard
    • Literal Types
    • Readonly
    • Generics
    • Type Inference
    • Type Compatibility
    • Never Type
    • Discriminated Unions
    • Index Signatures
    • Moving Types
    • Exception Handling
    • Mixins
  • JSX
    • React
    • Non React JSX
  • Options
    • noImplicitAny
    • strictNullChecks
  • Errors in TypeScript
    • Interpreting Errors
    • Common Errors
  • NPM
  • Testing
    • Jest
    • Cypress
  • Tools
    • Prettier
    • Husky
    • ESLint
    • Changelog
  • TIPs
    • String Based Enums
    • Nominal Typing
    • Stateful Functions
    • Currying
    • Type Instantiation
    • Lazy Object Literal Initialization
    • Classes are Useful
    • Avoid Export Default
    • Limit Property Setters
    • outFile caution
    • JQuery tips
    • static constructors
    • singleton pattern
    • Function parameters
    • Build Toggles
    • Barrel
    • Create Arrays
    • Typesafe Event Emitter
  • StyleGuide
  • TypeScript Compiler Internals
    • Program
    • AST
      • TIP: Visit Children
      • TIP: SyntaxKind enum
      • Trivia
    • Scanner
    • Parser
      • Parser Functions
    • Binder
      • Binder Functions
      • Binder Declarations
      • Binder Container
      • Binder SymbolTable
      • Binder Error Reporting
    • Checker
      • Checker Diagnostics
      • Checker Error Reporting
    • Emitter
      • Emitter Functions
      • Emitter SourceMaps
    • Contributing
Powered by GitBook
On this page
  • Type Declaration Space
  • Variable Declaration Space
Edit on GitHub
  1. Проект / Project

Простори Оголошень / Declaration Spaces

У TypeScript є два простори оголошень: простір оголошення variable і простір оголошення type. Ці поняття досліджуються нижче.

Type Declaration Space

Простір оголошення типу містить матеріал, який можна використовувати як анотацію типу. Наприклад нижче наведено кілька декларацій типів:

class Foo {};
interface Bar {};
type Bas = {};

Це означає, що ви можете використовувати Foo, Bar, Bas як анотацію типу. Наприклад:

var foo: Foo;
var bar: Bar;
var bas: Bas;

Зауважте, що навіть якщо у вас є інтерфейс, ви не можете використовувати її як змінну, оскільки вона не сприяє простору оголошення змінних. Це показано нижче:

interface Bar {};
var bar = Bar; // ERROR: "cannot find name 'Bar'"

Причина, чому він каже не вдається знайти ім’я, полягає в тому, що ім’я Bar не визначено у просторі оголошення змінної. Це підводить нас до наступної теми «Простір оголошення змінних».

Variable Declaration Space

Простір оголошення змінної містить матеріал, який можна використовувати як змінну. Ми побачили, що наявність class Foo вносить тип Foo в простір оголошення type. Вгадай що? Він також додає змінну Foo до простору оголошення змінної, як показано нижче:

class Foo {};
var someVar = Foo;
var someOtherVar = 123;

Це чудово, оскільки іноді ви хочете передати класи як змінні. Пам'ятайте, що:

  • ми не могли використовувати щось на зразок інтерфейсу, який є тільки у просторі оголошення type як змінну.

Подібним чином те, що ви оголошуєте за допомогою var, знаходиться тільки в просторі оголошення variable і не може використовуватися як анотація типу:

var foo = 123;
var bar: foo; // ERROR: "cannot find name 'foo'"

Причина, чому написано не вдається знайти ім’я, полягає в тому, що ім’я foo не визначено у просторі оголошення type.

PreviousЯкі файли / Which Files?NextМодулі / Modules

Last updated 1 year ago