1

所以我输入了以下内容

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 与 typesript 特定的结构(接口、类型等)进行交互?换句话说,当我输入 Duck 时。我希望会出现这样的情况:

$鸭

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

3 回答 3

2

这是一个小技巧,但可以完成工作。使用该.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 hover 一样,除了一些文档之外,底部的灰色线是显示的内容。

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

于 2019-04-20T21:03:53.767 回答
0

keyof Duck 不会给你一个类型,只是值,你应该使用:

letduckProps = keyof Duck;

于 2019-04-19T13:10:38.383 回答
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
于 2019-04-19T13:42:18.900 回答