要作为字符串发送的类型

时间:2017-09-27 16:31:12

标签: typescript typescript-typings

我正在使用以下有效类型。

type P = 'FACEBOOK' | 'GOOGLE' | 'JWT';

type Unio<U extends string> = {
    [K in U]: K
};

const PR: Unio<P> = {
    FACEBOOK: 'facebook',
    GOOGLE: 'google',
    JWT: 'jwt',
};

const providers: Map<(keyof typeof PR), IOAuthProvider> = new Map([
    [
        'FACEBOOK' as P, {
            clientID: process.env.FACEBOOK_CLIENT_ID,
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
        },
    ],
]);

我的期望是,如果我删除as P,则不会抛出任何类型错误,如下所示。我想删除它只是为了节省额外的打字。

const providers: Map<(keyof typeof PR), IOAuthProvider> = new Map([
    [
        'FACEBOOK', {
            clientID: process.env.FACEBOOK_CLIENT_ID,
            clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
        },
    ],
]);

但错误如下所示。

[ts]
Type 'Map<string, { clientID: string; clientSecret: string; }>' is not assignable to type 'Map<P, IOAuthProvider>'.
  Type 'string' is not assignable to type 'P'.

2 个答案:

答案 0 :(得分:0)

要使用您的示例,您可以使用Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Column = 4 Then Select Case .Row Case 20, 24, 25, 27, 28, 30 - 35, 37, 38, 40, 42 - 44, 54 - 56, 58, 59, 61 - 65 ActiveSheet.Protect Password:="Test", userinterfaceonly:=True .Value2 = "Prepared By" & " " & Environ("Username") .Value2 = .Value2 & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") .Locked = True End Select End If End With End Sub 地图,如下所示:

Android 2.3.3

注意:PR - 所以我在两个区域使用了相同的套管。

答案 1 :(得分:0)

这不是回答你的问题,而是因为你问了枚举的例子。我在这里发帖,因为它不符合评论空间:

enum PR {
    FACEBOOK = 'FACEBOOK',
    GOOGLE = 'GOOGLE',
    JWT = 'JWT',
};

const providers: Map<PR, any> = new Map([
    [
        PR.FACEBOOK, { },
    ],
]);