О «* .d.ts» в TypeScript

172

Я чувствую любопытство к *.d.ts из-за новичка в TypeScript. И кто-то сказал мне, что этот тип файла является чем-то вроде "head file" в C++, но только для JS. Но я не могу преобразовать чистый JS файл в файл *.d.ts если я не изменю *.js на *.ts. Итак, у меня есть три файла: файл JS, файл TS и файл *.d.ts.


  1. Какие отношения между ними?

  2. Как я могу использовать файл *.d.ts? Означает ли это, что я могу удалить файл *.ts навсегда?

  3. Если да, то как файл *.d.ts узнать, какой файл JS сопоставлен самому себе?


Большое спасибо! Было бы очень хорошо, если бы кто-то мог привести мне пример.

Теги:

4 ответа

178
Лучший ответ

Файл "d.ts" используется для предоставления информации типа typescript об API, написанном на JavaScript. Идея заключается в том, что вы используете что-то вроде jQuery или подчеркивания, существующую библиотеку javascript. Вы хотите использовать их из своего кода typescript.

Вместо того, чтобы переписывать jquery или подчеркивание или что-то в typescript, вы можете вместо этого написать файл d.ts, который содержит только аннотации типа. Затем из вашего кода typescript вы получаете преимущества typescript проверки статического типа при использовании чистой библиотеки JS.

  • 9
    Большое спасибо! Но как сопоставить файл * .d.ts с файлом js? Как файл js узнает, какой файл d.ts отображается на себя? Можете ли вы дать мне пример?
  • 0
    Файл .js ничего не знает о файле .d.ts - эти файлы предназначены для других файлов .ts, а не для файлов js. Больше позже.
Показать ещё 7 комментариев
35

d обозначает файлы декларации:

Когда скрипт TypeScript компилируется, появляется возможность создать файл объявления (с расширением .d.ts), который функционирует как интерфейс для компонентов в скомпилированном JavaScript. В процессе компилятор удаляет все тела функций и методов и сохраняет только сигнатуры экспортируемых типов. Полученный файл объявления затем можно использовать для описания экспортированных виртуальных типов TypeScript библиотеки или модуля JavaScript, когда сторонний разработчик использует его из TypeScript.

Концепция файлов объявлений аналогична концепции файлов заголовков, найденных в C/C++.

declare module arithmetics {
    add(left: number, right: number): number;
    subtract(left: number, right: number): number;
    multiply(left: number, right: number): number;
    divide(left: number, right: number): number;
}

Файлы объявлений типов могут быть написаны от руки для существующих библиотек JavaScript, как это было сделано для jQuery и Node.js.

Большие коллекции файлов декларационных популярных библиотек JavaScript, размещенные на GitHub в DefinitelyTyped и типизация реестре. Утилита командной строки, которая называется typings, предназначена для поиска и установки файлов объявлений из репозиториев.

  • 1
    Примечание: typings командной строки для typings самом деле не нужен, начиная с TypeScript 2.0. Более современный подход заключается в использовании оболочек для набора текста через репозиторий npm в пространстве имен @types . Для получения дополнительной информации см. Github.com/typings/typings/blob/master/README.md.
20

Я не мог комментировать и поэтому добавил это как ответ. Нам было немного трудно пытаться отобразить существующие типы в библиотеку javascript.

Чтобы сопоставить файл d.ts с его файлом javascript, необходимо дать файлу d.ts то же имя, что и у файла javascript, сохранить его в той же папке и указать нужный код в файле d.ts.

Например: test.js и test.d.ts находятся в testdir, затем вы импортируете его следующим образом в компонент реагирования:

import * as Test from "./testdir/test";

Файл d.ts был экспортирован как пространство имен следующим образом:

export as namespace Test;

export interface TestInterface1{}
export class TestClass1{}
  • 15
    Никто не дал ответ относительно того, как подключить d.ts к js, поэтому я подумал, что это правильное место.
4

Как сказал @takeshin,.d обозначает файл объявления для машинописи (.ts).

Несколько вопросов, которые необходимо уточнить, прежде чем ответить на этот пост -

  1. Typescript - это синтаксический расширенный набор javascript.
  2. Typescript не запускается сам по себе, его нужно перенести в javascript (преобразование typeScript в javascript)
  3. "Определение типа" и "Проверка типа" являются основными дополнительными функциональными возможностями, которые машинопись предоставляет через JavaScript. (проверьте разницу между типом script и javascript)

Если вы думаете, является ли typcript просто синтаксическим надмножеством, какие преимущества он предлагает - https://basarat.gitbooks.io/typescript/docs/why-typescript.html#the-typescript-type-system

Ответить на этот пост -

Как мы уже говорили, машинопись является надмножеством javascript и должна быть перенесена в javascript. Таким образом, если библиотека или сторонний код написан на машинописном шрифте, он в конечном итоге преобразуется в javascript, который может использоваться в проекте javascript, но, наоборот, не выполняется.

Для бывших

Если вы устанавливаете библиотеку JavaScript -

npm install --save mylib

и попробуйте импортировать его в машинописный код -

import * from "mylib";

вы получите ошибку.

"Не удалось найти модуль" mylib "."

Как уже упоминалось @Chris, многие библиотеки, такие как подчеркивание, Jquery уже написаны на javascript. Вместо того, чтобы переписывать эти библиотеки для проектов машинописного текста, было необходимо альтернативное решение.

Для этого вы можете предоставить файл объявления типа в библиотеке javascript с именем *.d.ts, как в предыдущем случае mylib.d.ts. Файл объявлений содержит только объявления типов функций и переменных, определенных в соответствующем файле JavaScript.

Теперь, когда вы попробуете -

import * from "mylib";

mylib.d.ts импортируется, который действует как интерфейс между кодом библиотеки javascript и проектом машинописного текста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню