所以我输入了以下内容
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 }
答案 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