// variable can be shadowed by a type
const globalType: i32 = 2;
type globalType = bool;
globalType;
var globalType_test: globalType;

type typeGlobal = bool;
const typeGlobal: i32 = 3;
var typeGlobal_test: typeGlobal;
typeGlobal;

// namespace can be shadowed by a type
namespace namespaceType { export function test(): void {} }
type namespaceType = i32;
namespaceType.test();
var namespaceType_test: namespaceType;

type typeNamespace = i32;
namespace typeNamespace { export function test(): void {} }
var typeNamespace_test: typeNamespace;
typeNamespace.test();

// function can be shadowed by a type
function functionType(): void {}
type functionType = i32;
functionType();
var functionType_test: functionType;

type typeFunction = i32;
function typeFunction(): void {}
var typeFunction_test: typeFunction;
typeFunction();

// class can join with namespace
class classNamespace { static test1(): void {} }
namespace classNamespace { export function test2(): void {} }
classNamespace.test1();
classNamespace.test2();

namespace namespaceClass { export function test1(): void {} } // TS2434, but possible in AS
class namespaceClass { static test2(): void {} }
namespaceClass.test1();
namespaceClass.test2();

// function can join with namespace
function functionNamespace(): void {}
namespace functionNamespace { export function test(): void {} }
functionNamespace();
functionNamespace.test();

namespace namespaceFunction { export function test(): void {} } // TS2434, but possible in AS
function namespaceFunction(): void {}
namespaceFunction.test();
namespaceFunction();

// enum can join with namespace
enum enumNamespace { val = 1 }
namespace enumNamespace { export function test(): void {} }
enumNamespace.val;
enumNamespace.test();

namespace namespaceEnum { export function test(): void {} }
enum namespaceEnum { val = 2 }
namespaceEnum.test();
namespaceEnum.val;

// namespace can join with namespace
namespace namespaceNamespace { export function test1(): void {} }
namespace namespaceNamespace { export function test2(): void {} }
namespaceNamespace.test1();
namespaceNamespace.test2();