О "*.d.ts" в TypeScript

Я чувствую любопытство к *.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 сопоставлен самому себе?


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

Ответ 1

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

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

Ответ 2

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, предназначена для поиска и установки файлов объявлений из репозиториев.

Ответ 3

Я не мог комментировать и поэтому добавил это как ответ. Нам было немного трудно пытаться отобразить существующие типы в библиотеку 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{}

Ответ 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 и проектом машинописного текста.

Ответ 5

Сработал пример для конкретного случая:

Допустим, у вас есть мой модуль, которым вы делитесь через npm.

Вы устанавливаете его с помощью npm install my-module

Вы используете это таким образом:

import * as lol from 'my-module';

const a = lol('abc', 'def');

Логика модуля находится в index.js:

module.exports = function(firstString, secondString) {

  // your code

  return result
}

Чтобы добавить набор текста, создайте файл index.d.ts:

declare module 'my-module' {
  export default function anyName(arg1: string, arg2: string): MyResponse;
}

interface MyResponse {
  something: number;
  anything: number;
}