Форум программистов, компьютерный форум, киберфорум
TypeScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768

Создать экземпляр по полному имени класса

18.12.2018, 13:34. Показов 3658. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как обратиться к классу по его полному имени в TypeScript. В самом простом случае, есть два класса:
C#
1
2
3
4
5
6
7
8
9
10
11
namespace API {
    export class SomeUnit {
 
    }
}
 
namespace UI {
    export class SomeUnit {
        
    }
}
И далее, где-то в другом классе мне нужно создать экземпляры обоих этих классов по их полным (включая пространство имён) именам:
C#
1
2
var apiUnit = new API.SomeUnit();
var uiUnit = new UI.SomeUnit();
Вероятно, у меня что-то настроено не так (Angular6) или я недопонимаю принцип экспортов/импортов в TS, но не получается.

Более того, актуально это не только в случае одноимённых классов из разных пространств имён, но и просто когда в одном блоке кода пересекаются сущности из разных слоёв логики и когда полное имя класса заметно упрощает чтение кода без необходимости лезть в комментарии или выводить суть объекта из контекста или его сборки/файла. Т.е. если где-то в коде есть:
C#
1
var invoice = new Invoice();
То сразу и не поймёшь, что это за класс, но если оно записано с полным именем, то сразу всё понятно и код читается намного легче:
C#
1
2
var invoice = new API.DTO.Invoice();
var invoice = new UI.Model.Invoice();
Возможно ли это как-то на TS похожим образом использовать, не вписывая весь аналог пространства имён в виде префикса имени самого класса?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2018, 13:34
Ответы с готовыми решениями:

Получение объекта класса по полному имени и аргументам конструктора
Существует реализация класса для создания экземпляров объектов и пока что в нём реализован (не до конца) один метод: public class...

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one class two class main... Нужно...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

1
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
19.12.2018, 19:31
Лучший ответ Сообщение было отмечено 8Observer8 как решение

Решение

Я добавил ключевое слово export перед namespace:
JavaScript
1
export namespace API
В файле, где используем классы, добавил import пространств имён:
JavaScript
1
2
import { API } from "./API";
import { UI } from "./UI";
Работает:
JavaScript
1
2
        let apiUnit = new API.SomeUnit();
        let uiUnit = new UI.SomeUnit();
Песочница

Исходники


namespace-fullname.zip

API.ts
JavaScript
1
2
3
4
5
6
7
8
9
10
export namespace API
{
    export class SomeUnit
    {
        constructor()
        {
            document.write("API.SomeUnit constructor" + "<br>");
        }
    }
}
UI.ts
JavaScript
1
2
3
4
5
6
7
8
9
10
export namespace UI
{
    export class SomeUnit
    {
        constructor()
        {
            document.write("UI.SomeUnit constructor" + "<br>");
        }
    }
}
Program.ts
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { API } from "./API";
import { UI } from "./UI";
 
// Playground: https://plnkr.co/edit/hiQJeMvKRSghOWlLBTyP?p=preview
 
class Program
{
    public static Main(): void
    {
        document.write("Hello from Main" + "<br>");
 
        let apiUnit = new API.SomeUnit();
        let uiUnit = new UI.SomeUnit();
 
        document.close();
    }
}
Program.Main();
RequireConfig.ts
JavaScript
1
2
3
4
5
6
7
8
requirejs.config({
    baseUrl: "."
});
 
requirejs(["Program"], (Program) =>
{
 
});
index.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Namespace Fullname in TypeScript</title>
    <script data-main="RequireConfig" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
</head>
 
<body>
 
</body>
 
</html>
tsconfig.json
JSON
1
2
3
4
5
6
7
8
{
    "compilerOptions": {
        "module": "amd",
        "target": "es5",
        "outDir": ".",
        "sourceMap": true
    }
}
package.json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "name": "namespace-fullname",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@types/requirejs": "^2.1.31"
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2018, 19:31
Помогаю со студенческими работами здесь

Создать экземпляр класса без явного указания членов класса
Если у меня есть два конструктора, один из которых по умолчанию, а второй явный. Я почему-то не могу создать экземпляр класса без явного...

Создать экземпляр класса по ссылке экземпляра класса
Есть класс для обработки клиентов // Абстрактный class ClientProcessing { }; Я создаю от него наследника class...

Создать экземпляр класса
Доброго всем времени суток. Вопрос банальный, но из-за этого не могу разобраться. Есть класс &quot;Item&quot;, пытаюсь создать его...

Создать экземпляр класса
Здравствуйте. У меня есть массив String s; s - тут хранится имя класса, экземпляр которого мне нужно создать, как это сделать ?

Как создать экземпляр класса
Доброго вечера. Уже запутался и не могу понять что делать - есть класс ref class Mnos { ... } { Далее при запуске программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 11.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 09.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 09.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 08.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 08.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru