Всякий раз, когда вы используете import
, он всегда будет преобразовываться в модуль. Однако вы можете использовать namespaces
вместе с "module": "system"
, после чего его можно будет выводить в один файл (или несколько файлов).
Итак, для очень простого проекта у вас будет следующее:
{
"compilerOptions": {
"target": "es2016",
"module": "system",
"outFile": "./lib.js"
},
"include": [
"./**/*.ts"
]
}
Затем вы создадите файлы, которые будут выглядеть следующим образом:
[ 1141] index.ts
namespace MyNamespace {
// This is a private method that cannot be accessed in other files
// the reason for that is because it isn't exported.
function y() {
alert("test");
}
x(y)
}
namespace MyNamespace {
// This method can be referenced in other files because it is exported.
export function x(callback: () => void): void {
callback();
}
}
var MyNamespace;
(function(MyNamespace) {
function x(callback) {
callback();
}
MyNamespace.x = x;
})(MyNamespace || (MyNamespace = {}));
var MyNamespace;
(function(MyNamespace) {
function y() {
alert("test");
}
MyNamespace.x(y);
})(MyNamespace || (MyNamespace = {}));
Затем вы можете использовать эти методы / функции вне пространства имен, просто вызывая их через пространство имен:
MyNamespace.y()
MyNamespace.x(MyNamespace.y)
// etc.
Для использования import
В рамках вашего проекта вам потребуется сторонняя библиотека requirejs . Это позволит вам использовать модули в браузере.
Итак, чтобы сделать это, нам сначала нужно иметь соответствующий конфигурационный файл, который выглядит примерно так, как показано выше, с единственным отличием - "module": "amd"
.
{
"compilerOptions": {
"target": "es2016",
"module": "amd",
"outFile": "./lib.js"
},
"include": [
"./**/*.ts"
]
}
Далее нам нужно создать правильный основной файл машинописи:
requirejs(['functions'], function (util: any) {
function y() {
alert("test");
}
util.x(y)
})
Поскольку используется третий партийная библиотека, она инициализируется по-разному (используя requirejs()
). Это говорит requirejs, что это точка входа в приложение, поэтому это необходимо только один раз.
export function x(callback: () => void): void {
callback();
}
define("functions", ["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function x(callback) {
callback();
}
exports.x = x;
});
requirejs(['functions'], function (util) {
function y() {
alert("test");
}
util.x(y);
});
If ваш скрипт находится во внешнем файле, вы можете использовать data-main
в теге скрипта, requirejs автоматически загрузит файл.
Эта функция все еще экспериментальная и поддерживается не во всех браузерах . Все, что вам нужно сделать, это использовать атрибут type="module"
в вашем теге скрипта:
Примечание: здесь мы используем оба разных target
и module
, а также outDir
.
Примечание: es2016
не является допустимым типом модуля.
{
"compilerOptions": {
"target": "es2016",
"module": "es2015",
"outDir": "./lib"
},
"include": [
"./**/*.ts"
]
}
Примечание: import
использует расширение .js
, иначе браузер не сможет загрузить его, если у вас нет правил перезаписи.
import { x } from './functions.js'
function y() {
alert("test");
}
x(y)
export function x(callback: () => void): void {
callback();
}
Это выдаст почти то же самое, что и файлы ts (Stackoverflow не поддерживает внешние файлы js, если они не размещены где-то, поэтому здесь нет фрагмента): [ 1165]
// index.js
import { x } from './functions.js';
function y() {
alert("test");
}
x(y);
// functions.js
export function x(callback) {
callback();
}
Я не протестировал его, но я думаю, что это должно работать:
<GridViewColumn
Header="Order Date"
DisplayMemberBinding=
"{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
XAML
<UserControl.Resources>
<myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<GridViewColumn
DisplayMemberBinding=="{Binding Path=OrderDate, Converter={StaticResource DateTimeConverter}}"
/>
C#
public class DateTimeConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (value != null)
{
return ((DateTime)value).ToString("dd.MM.yyyy");
}
else
{
return String.Empty;
}
}
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return DateTime.Parse(value.ToString());
}
}