如何检查打字稿的repl(ts-node)中的类型?

时间:2019-04-19 13:02:45

标签: typescript ts-node

所以我输入了以下内容

type Duck = {
    colors: string;
    featheres: number;
}

type DuckProps = keyof Duck 

我如何检查/验证例如DuckProps的价值:'colors' | 'feathers'

我似乎无法控制台日志或使用它,因为它将返回

[eval].ts:8:7 - error TS2693: 'DuckProps' only refers to a type, but is being used as a value here.

如何通过repl与typeript特定的构造(接口,类型等)进行交互?换句话说,当我键入Duck时。我希望这样的事情会出现:

  

$鸭

Duck<Typescript type> { color: string; feathers: number }

3 个答案:

答案 0 :(得分:1)

这里有点破烂,但可以完成工作。使用.type命令可以将所需的类型强制转换为语句,并获取ts-node以显示与其相关的快速信息。

> type Duck = {
...    colors: string;
...    featheres: number;
...  }
undefined
> type DuckProps = keyof Duck
undefined
> .type _ as DuckProps
type DuckProps = "colors" | "featheres"

注意事项:这仅适用于末尾的命名类型。在下面发生的是,.type调用打字稿的getQuickInfoAtPosition,其位置在输入的结尾。就像在打字机游乐场中按ctrl悬停一样,该灰色底线是与一些附带的文档一起显示的。

这似乎是ts-node的一项有用功能,可能需要功能请求。

答案 1 :(得分:0)

Duck的键不会给您类型,只是值, 您应该使用:

let duckProps =鸭的钥匙;

答案 2 :(得分:0)

我假设您要确保没有人将类型Duck与不存在的属性名一起使用。在下面的代码示例中,我检查属性是否存在于Duck上,并且类型正确:

type Duck = {
    colors: string;
    featheres: number;
}

function doStuff<T, P extends keyof T>(
    property: P,
    value: T[P],
    obj: T) {

   // Do something     
}

const myDuck = {
    colors: "red",
    featheres: 123
};

doStuff('colors', 'red', myDuck);
doStuff('featheres', 100, myDuck); 
doStuff('colors', 123, myDuck); // error: the value of the wrong type
doStuff('colours', 'red', myDuck); // error: misspelled prop name