TypeScript:用符号声明交集类型?
TypeScript: Declare Intersection Type with Symbol?
我目前正在编写一个辅助函数,它将一个符号添加到一个值中。
function setSymbol<S extends symbol, T>(symbol: S, on: T, withValue: any = true): S & T { /*...*/ }
我的问题是,我试图解释 TypeScript,这个函数的结果是一个具有符号-属性 的值,所以我可以这样做:
const MySymbol = Symbol();
const value = {};
const resultWithSymbol = setSymbol(MySymbol, value);
resultWithSymbol[MySymbol] = true;
这可能吗?我用 unique symbol
玩了一下,但无法正常工作。感谢您的帮助!
如果您有任何键类型 K
并且想用该键和类型 V
的值表示一个对象,您可以像这样使用内置的 Record<K, V>
utility type :
function setSymbol<S extends symbol, T>(
symbol: S,
on: T,
withValue: any = true
): Record<S, any> & T {
return null! // impl here
}
(您应该根据您的用例确定 Record<S, any>
是否足够好,或者您是否希望 withValue
进一步缩小类型)。请注意 Record<S, any>
与 mapped type {[K in S]: any}
相同,如果您想使用它的话。您会看到您的示例代码现在可以运行了:
const MySymbol = Symbol();
const value = {};
const resultWithSymbol = setSymbol(MySymbol, value);
resultWithSymbol[MySymbol] = true; // okay now
resultWithSymbol[Symbol("some other symbol")] = true; // error
好的,希望对您有所帮助;祝你好运!
我目前正在编写一个辅助函数,它将一个符号添加到一个值中。
function setSymbol<S extends symbol, T>(symbol: S, on: T, withValue: any = true): S & T { /*...*/ }
我的问题是,我试图解释 TypeScript,这个函数的结果是一个具有符号-属性 的值,所以我可以这样做:
const MySymbol = Symbol();
const value = {};
const resultWithSymbol = setSymbol(MySymbol, value);
resultWithSymbol[MySymbol] = true;
这可能吗?我用 unique symbol
玩了一下,但无法正常工作。感谢您的帮助!
如果您有任何键类型 K
并且想用该键和类型 V
的值表示一个对象,您可以像这样使用内置的 Record<K, V>
utility type :
function setSymbol<S extends symbol, T>(
symbol: S,
on: T,
withValue: any = true
): Record<S, any> & T {
return null! // impl here
}
(您应该根据您的用例确定 Record<S, any>
是否足够好,或者您是否希望 withValue
进一步缩小类型)。请注意 Record<S, any>
与 mapped type {[K in S]: any}
相同,如果您想使用它的话。您会看到您的示例代码现在可以运行了:
const MySymbol = Symbol();
const value = {};
const resultWithSymbol = setSymbol(MySymbol, value);
resultWithSymbol[MySymbol] = true; // okay now
resultWithSymbol[Symbol("some other symbol")] = true; // error
好的,希望对您有所帮助;祝你好运!