Утверждая, что TypeScript не сможет набрать текст, проверьте пример кода - PullRequest
0 голосов
/ 05 июля 2018

Когда я пишу библиотеку TypeScript с общими ограничениями, я хотел бы иметь возможность указывать тесты кода, который должен проверять тип, и кода, который не должен (потому что, скажем, Я хочу убедиться, что средство проверки типов ловит вещи, которые не удовлетворяют ограничению правильно.

Я не нашел решения в обычных библиотеках модульного тестирования (поскольку тесты на ошибки не компилировались бы в первую очередь). Я думаю, что я видел некоторые примеры этого глубоко в наборе тестов TypeScript, где они либо использовали именование файлов или комментарии для обозначения утверждений, но я не могу их найти сейчас, и я не мог понять, как бегун тестов работал для такого большого проект в любом случае. Гуглить тоже сложно: каждая комбинация терминов, о которых я думал, возвращает ссылки на такие вещи, как защита типов или отчеты об ошибках в самом TypeScript.

Я знаю, что мог бы установить bash-скрипт, который просто запускает tsc над файлами и утверждает, что они терпят неудачу, но я бы предпочел возможность совпадения при определенных ошибках компиляции, если это возможно. Есть идеи?

1 Ответ

0 голосов
/ 05 июля 2018

Для этого вы можете использовать Microsoft / dtslint . После того, как вы прошли настройку, вы можете написать тестовые файлы так:

index.d.ts:

// TypeScript Version: 2.1

declare module 'Abc' {
    function TestFunc(s: string): undefined;
}

test.ts:

import Abc from 'Abc';

// $ExpectError
Abc.TestFunc(true);

// $ExpectError
Abc.TestFunc(5);

Abc.TestFunc("it is a string");

Теперь, когда вы запускаете инструмент dtslint cli, ошибки не возвращаются, так как ожидаются все ошибки. Если, например, ошибка не комментируется с $ExpectError (например, Abc.TestFunc(true);), тогда инструмент dtslint завершается ошибкой с сообщением:

Error: C:/stackoveflow/test.ts:3:14
ERROR: 3:14  expect  TypeScript@next compile error:
Argument of type 'true' is not assignable to parameter of type 'string'.

    at I:\..\dtslint\bin\index.js:101:19
    at Generator.next (<anonymous>)
    at fulfilled (I:\..\dtslint\bin\index.js:5:58)
    at <anonymous>
...