Giter Club home page Giter Club logo

dtslint's Introduction

dtslint tests a TypeScript declaration file for style and correctness. It will install typescript and tslint for you, so this is the only tool you need to test a type definition.

Setup

If you are working on DefinitelyTyped, read the DefinitelyTyped README.

If you are writing the library in TypeScript, don't use dtslint. Use --declaration to have type definitions generated for you.

If you are a library author, read below.

Add types for a library (not on DefinitelyTyped)

dts-gen may help, but is not required.

Create a types directory. (Name is arbitrary.) Add "types": "types" to your package.json. Read more on bundling types here.

types/index.d.ts

Only index.d.ts needs to be published to NPM. Other files are just for testing. Write your type definitions here. Refer to the handbook or dts-gen's templates for how to do this.

types/tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "lib": ["es6"],
        "noImplicitAny": true,
        "noImplicitThis": true,
        "strictNullChecks": true,

        // If the library is an external module (uses `export`), this allows your test file to import "mylib" instead of "./index".
        // If the library is global (cannot be imported via `import` or `require`), leave this out.
        "baseUrl": ".",
        "paths": { "mylib": ["."] }
    }
}

You may extend "lib" to, for example, ["es6", "dom"] if you need those typings. You may also have add "target": "es6" if using certain language features.

types/tslint.json

If you are using the default rules, this is optional.

If present, this will override dtslint's default settings. You can specify new lint rules, or disable some. An example:

{
    "extends": "dtslint/dtslint.json",
    "rules": {
        "semicolon": false,
        "indent": [true, "tabs"]
    }
}

types/test.ts

You can have any number of test files you want, with any names. See below on what to put in them.

Write tests

A test file should be a piece of sample code that tests using the library. Tests are type-checked, but not run. To assert that an expression is of a given type, use $ExpectType. To assert that an expression causes a compile error, use $ExpectError. (Assertions will be checked by the expect lint rule.)

import { f } from "my-lib"; // f is(n: number) => void

// $ExpectType void
f(1);

// Can also write the assertion on the same line.
f(2); // $ExpectType void

// $ExpectError
f("one");

Specify a TypeScript version

Normally packages will be tested using TypeScript 2.0. To use a newer version, specify it by including a comment like so:

// TypeScript Version: 2.1

For DefinitelyTyped packages, this should go just under the header (on line 5). For bundled typings, this can go on any line (but should be near the top).

Run tests

  • npm install --save-dev dtslint
  • Add to your package.json scripts: "dtslint": "dtslint types"
  • npm run dtslint

Contributing

Build

npm link . # Global 'dts-lint' should now refer to this.
npm run watch

Note: If changing a lint rule, you will have to dtslint --clean because rules are copied into install directories.

Test

Use npm run test to run all tests. To run a single test: node node_modules/tslint/bin/tslint --rulesDirectory bin/rules --test test/expect.

Publish

production branch

git checkout production
git merge master
npm run build
git add --all
git commit -m "Update bin/"
git push

The production branch is a dependency of DefinitelyTyped and types-publisher.

NPM

TODO

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

dtslint's People

Contributors

microsoftopensource avatar mhegazy avatar msftgits 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.