Giter VIP home page Giter VIP logo

definitelytyped's Introduction

DefinitelyTyped Build Status

Join the chat at https://gitter.im/borisyankov/DefinitelyTyped

The repository for high quality TypeScript type definitions.

Also see the definitelytyped.org website, although information in this README is more up-to-date.

What are declaration files?

See the TypeScript handbook.

How do I get them?

npm

This is the preferred method. This is only available for TypeScript 2.0+ users. For example:

npm install --save-dev @types/node

The types should then be automatically included by the compiler. See more in the handbook.

For an NPM package "foo", typings for it will be at "@types/foo". If you can't find your package, look for it on TypeSearch.

If you still can't find it, check if it bundles its own typings. This is usually provided in a "types" or "typings" field in the package.json, or just look for any ".d.ts" files in the package and manually include them with a /// <reference path="" />.

Other methods

These can be used by TypeScript 1.0.

  • Typings
  • NuGet
  • Manually download from the master branch of this repository

You may need to add manual references.

How can I contribute?

DefinitelyTyped only works because of contributions by users like you!

Test

Before you share your improvement with the world, use it yourself.

Test editing an exiting package

To add new features you can use module augmentation. You can also directly edit the types in node_modules/@types/foo/index.d.ts, or copy them from there and paste inside of declarations.d.ts and follow the steps below.

Test a new package

  • Add a new file declarations.d.ts to your project.
  • Add it to the compilation, through "includes" or "files" in your tsconfig, or through a /// <reference path="" /> declaration in your code.
  • Inside declarations.d.ts, write declare module "foo" { }, then write the module declaration inside.
  • Test that your code works.
  • Then, once you've tested your definitions, make a PR contributing the definition.

Make a pull request

Once you've tested your package, you can share it on DefinitelyTyped.

First, fork this repository. Then inside your repository:

  • git checkout types-2.0

New work should generally be done on the types-2.0 branch. If you want your changes to be available to typings users, then you may edit master instead.

Edit an existing package

  • cd my-package-to-edit
  • Make changes. Remember to edit tests.
  • You may also want to add yourself to "Definitions by" section of the package header.
  • npm install -g [email protected] and run tsc.

When you make a PR to edit an existing package, dt-bot should @-mention previous authors. If it doesn't, you can do so yourself in the comment associated with the PR.

Create a new package

If you are the library author, or can make a pull request to the library, bundle types instead of publishing to DefinitelyTyped.

If you are adding typings for an NPM package, create a directory with the same name. If the package you are adding typings for is not on NPM, make sure the name you choose for it does not conflict with the name of a package on NPM. (You can use npm info foo to check for the existence of the foo package.)

Your package should have this structure:

File Purpose
index.d.ts This contains the typings for the package.
foo-tests.ts This contains sample code which tests the typings. This code does not run, but it is type-checked.
tsconfig.json This allows you to run tsc within the package.

index.d.ts should start with a header looking like:

// Type definitions for foo 1.2
// Project: https://github.com/baz/foo
// Definitions by: My Self <https://github.com/me>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

The Project link does not have to be to GitHub, but prefer linking to a source code repository rather than to a project website.

tsconfig.json should look like this:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "noImplicitAny": true,
        "strictNullChecks": true,
        "baseUrl": "../",
        "typeRoots": [
            "../"
        ],
        "types": [],
        "noEmit": true,
        "forceConsistentCasingInFileNames": true
    },
    "files": [
        "index.d.ts",
        "foo-tests.ts"
    ]
}

These should be identical accross projects except that foo-tests will be replaced with the name of your test file, and you may also add the "jsx" compiler option if your library needs it.

DefinitelyTyped members routinely monitor for new PRs, though keep in mind that the number of other PRs may slow things down.

For a good example package, see base64-js.

Common mistakes

  • First, follow advice from the handbook.
  • Formatting: Either use all tabs, or always use 4 spaces. Also, always use semicolons, and use egyptian braces.
  • interface X {}: An empty interface is essentially the {} type: it places no constraints on an object.
  • interface IFoo {}: Don't add I to the front of an interface name.
  • interface Foo { new(): Foo; }: This defines a type of objects that are new-able. You probably want `declare class Foo { constructor(); }
  • const Class: { new(): IClass; }: Prefer to use a class declaration class Class { constructor(); } instead of a new-able constant.
  • namespace foo {}: Do not add a namespace just so that the import * as foo syntax will work. If it is commonJs module with a single export, you should use the import foo = require("foo") syntax. See more explanation here.
  • getMeAT<T>(): T: If a type parameter does not appear in the types of any parameters, you don't really have a generic function, you just have a disguised type assertion. Prefer to use a real type assertion, e.g. getMeAT() as number. Example where a type parameter is acceptable: function id<T>(value: T): T;. Example where it is not acceptable: function parseJson<T>(json: string): T;. Exception: new Map<string, number>() is OK.

Removing a package

When a package bundles its own types, types should be removed from DefinitelyTyped to avoid confusion. Make a PR doing the following:

  • Delete the directory.
  • Add a new entry to notNeededPackages.json.
    • libraryName: Descriptive name of the library, e.g. "Angular 2" instead of "angular2". (May be identical to "typingsPackageName".)
    • typingsPackageName: This is the name of the directory you just deleted.
    • sourceRepoURL: This should point to the repository that contains the typings.
    • asOfVersion: A stub will be published to @types/foo with this version. Should be higher than any currently published version.
  • Any other packages in DefinitelyTyped that referenced the deleted package should be updated to reference the bundled types. To do this, add a package.json with "dependencies": { "foo": "x.y.z" }.

FAQ

What exactly is the relationship between this repository and the @types packages on NPM?

The types-2.0 branch is automatically published to the @types scope on NPM thanks to types-publisher. This usually happens within an hour of changes being merged.

Changes to the master branch are also manually merged into the types-2.0 branch, but this takes longer.

I'm writing a definition that depends on another definition. Should I use <reference types="" /> or an import?

If the module you're referencing is an external module (uses export), use an import. If the module you're referenceing is an ambient module (uses declare module, or just declares globals), use <reference types="" />.

What do I do about older versions of typings?

Currently we don't support this, though it is planned. If you're adding a new major version of a library, you can copy index.d.ts to foo-v2.3.d.ts and edit index.d.ts to be the new version.

I notice some packages having a package.json here.

Usually you won't need this. When publishing a package we will normally automatically create a package.json for it. A package.json may be included for the sake of specifying dependencies. Here's an example. We do not allow other fields, such as "description", to be defined manually. Also, if you need to reference an older version of typings, you must do that by adding "dependencies": { "@types/foo": "x.y.z" } to the package.json.

I notice some tsconfig.json are missing "noImplicitAny": true or "strictNullChecks": true.

Then they are wrong. You can help by submitting a pull request to fix them.

Definitions in types-2.0 seem written differently than in master.

If you're targeting types-2.0, write it like the types-2.0 definitions. If you're targeting master, we may change it to the new style when merging from master to types-2.0.

Can I request a definition?

Here are the currently requested definitions.

License

This project is licensed under the MIT license.

Copyrights on the definition files are respective of each contributor listed at the beginning of each definition file.

Analytics

definitelytyped's People

Contributors

bartvds avatar basarat avatar bczengel avatar borisyankov avatar chrootsu avatar cyrilschumacher avatar danielrosenwasser avatar diullei avatar domir avatar horiuchi avatar igorbek avatar johnnyreilly avatar lgrignon avatar mhegazy avatar minestarks avatar miniak avatar nikeee avatar nohomey avatar paulvanbrenk avatar pspeter3 avatar rhysd avatar ryancavanaugh avatar sandersn avatar stpettersens avatar tkqubo avatar tkrotoff avatar tonypythoneer avatar vsiao avatar vvakame avatar zhengbli avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.