2017-02-03 3 views
1

В проекте машинописного текста есть ли способ объявить тип и поделиться им по всем файлам, так же как мы имеем доступ к типам, определенным по всему миру, по адресу node.d.ts?Как объявить тип глобально в проекте (машинопись)

Например, допустим, что в моем проекте IUser что-то такое, как

interface IUser { 
    name: string, 
    mail: string 
} 

Хорошо, я могу создать этот интерфейс в common/interfaces.ts файл и импортировать его каждый раз, когда мне нужно ... но будет быть настолько красивым, чтобы иметь возможность объявлять такие интерфейсы по всему миру для всего проекта и иметь быстрый доступ к ним без импорта каких-либо файлов.

ответ

3

Вы можете создать a Файл определения, заканчивая расширением .d.ts, и поместить его в свой проект, где вы хотели бы:

user.d.ts

interface IUser { 
    name: string, 
    mail: string 
} 

Это также хороший способ, чтобы заполнить отсутствие глобального типы. Для размещения этих файлов у меня есть папка lib/global.

Примечание: это работает только с определениями типов, а не фактическим кодом, так как (1), что фактический код должен быть импортирован каким-то образом, (2) .d.ts является ambient. Кроме того, для типов, определенных таким образом, чтобы быть глобально видимыми, соответствующий файл декларации не должен содержать экспорт верхнего уровня (в противном случае файл декларации будет рассматриваться как модуль, требующий импорта для доступа к его типам).

+0

@Manu - TypeScript _should_ сможет его найти. Вы включаете этот файл определения в 'tsconfig.json'? (или что бы вы ни делали, например, в Visual Studio, он должен быть добавлен в проект) –

+1

@Manu - Кроме того, он будет работать только в том случае, если файл '.d.ts' не распознается как _module_, не используйте экспорт верхнего уровня в 'user.d.ts'. –

+1

Что делать, если вам нужно импортировать тип из зависимости? например, «момент» – Manu

2

Вы можете определять типы в нескольких файлах и использовать их в других файлах. Существует два возможных способа:

  1. Файлы используют одинаковое пространство имен. В этом случае тип может быть повторно использован напрямую.
  2. Файлы используют разные пространства имен. В этом случае тип многократного использования должен быть помечен как export. Затем он может использоваться в других пространствах имен. С инструкцией import вы можете избежать использования префикса пространства имен.

В любом случае, вы должны добавить a reference to the file, типы которых вы хотите использовать повторно.

же пространстве имен

Файл 1:

namespace Example { 
    export interface IUser { 
     name: string, 
     mail: string 
    } 
} 

Файл 2:

/// <reference path="./File1.ts" /> 

namespace Example { 
    class User implements IUser { 
     name: string, 
     mail: string 
    } 
} 

Различные пространства имен

Файл 1:

namespace Example { 
    export interface IUser { 
     name: string, 
     mail: string 
    } 
} 

Файл 2 (без импорта):

/// <reference path="./File1.ts" /> 

class User implements Example.IUser { 
    name: string, 
    mail: string 
} 

Файл 2 (с импортом):

/// <reference path="./File1.ts" /> 

import IUser = Example.IUser; 

class User implements IUser { 
    name: string, 
    mail: string 
} 
Смежные вопросы