From deb14330ad5e5ba86df404fdb63021866ea93d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B8=85?= Date: Mon, 22 Oct 2018 18:28:36 +0800 Subject: [PATCH] support use typescript --- package.json | 5 +++ .../Authorized/AuthorizedRoute.d.ts | 13 ++++++ src/components/Authorized/index.d.ts | 41 +++++++------------ src/components/Charts/ChartCard/index.d.ts | 2 +- src/components/Login/LoginItem.d.ts | 11 +++++ src/components/Login/Tab.d.ts | 7 ++++ src/components/Login/index.d.ts | 38 ++++++----------- src/components/PageHeader/breadcrumb.d.ts | 4 +- tsconfig.json | 35 ++++++++++++++++ tslint.json | 11 +++++ 10 files changed, 112 insertions(+), 55 deletions(-) create mode 100644 src/components/Authorized/AuthorizedRoute.d.ts create mode 100644 src/components/Login/LoginItem.d.ts create mode 100644 src/components/Login/Tab.d.ts create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/package.json b/package.json index c1baa4c9..32f8a83a 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "lint:fix": "eslint --fix --ext .js src mock tests && npm run lint:style", "lint-staged": "lint-staged", "lint-staged:js": "eslint --ext .js", + "tslint": "npm run tslint:fix", + "tslint:fix": "tslint --fix 'src/**/*.ts*'", "test": "umi test", "test:component": "umi test ./src/components", "test:all": "node ./tests/run-tests.js", @@ -71,6 +73,9 @@ "eslint-plugin-jsx-a11y": "^6.1.2", "eslint-plugin-markdown": "^1.0.0-beta.6", "eslint-plugin-react": "^7.11.1", + "tslint": "^5.10.0", + "tslint-config-prettier": "^1.10.0", + "tslint-react": "^3.6.0", "gh-pages": "^2.0.1", "husky": "^1.1.2", "lint-staged": "^7.2.0", diff --git a/src/components/Authorized/AuthorizedRoute.d.ts b/src/components/Authorized/AuthorizedRoute.d.ts new file mode 100644 index 00000000..912b283a --- /dev/null +++ b/src/components/Authorized/AuthorizedRoute.d.ts @@ -0,0 +1,13 @@ +import * as React from 'react'; +import { RouteProps } from 'react-router'; + +type authorityFN = (currentAuthority?: string) => boolean; + +type authority = string | string[] | authorityFN | Promise; + +export interface IAuthorizedRouteProps extends RouteProps { + authority: authority; +} +export { authority }; + +export class AuthorizedRoute extends React.Component {} diff --git a/src/components/Authorized/index.d.ts b/src/components/Authorized/index.d.ts index ad42676d..b3e2f56c 100644 --- a/src/components/Authorized/index.d.ts +++ b/src/components/Authorized/index.d.ts @@ -1,41 +1,30 @@ import * as React from 'react'; -import { RouteProps } from 'react-router'; - -type authorityFN = (currentAuthority?: string) => boolean; - -type authority = string | Array | authorityFN | Promise; - +import AuthorizedRoute, { authority } from './AuthorizedRoute'; export type IReactComponent

= | React.StatelessComponent

| React.ComponentClass

| React.ClassicComponentClass

; -interface Secured { - (authority: authority, error?: React.ReactNode): (target: T) => T; -} - -export interface AuthorizedRouteProps extends RouteProps { - authority: authority; -} -export class AuthorizedRoute extends React.Component {} +type Secured = ( + authority: authority, + error?: React.ReactNode +) => (target: T) => T; -interface check { - ( - authority: authority, - target: T, - Exception: S - ): T | S; -} +type check = ( + authority: authority, + target: T, + Exception: S +) => T | S; -export interface AuthorizedProps { +export interface IAuthorizedProps { authority: authority; noMatch?: React.ReactNode; } -export class Authorized extends React.Component { - static Secured: Secured; - static AuthorizedRoute: typeof AuthorizedRoute; - static check: check; +export class Authorized extends React.Component { + public static Secured: Secured; + public static AuthorizedRoute: typeof AuthorizedRoute; + public static check: check; } declare function renderAuthorize(currentAuthority: string): typeof Authorized; diff --git a/src/components/Charts/ChartCard/index.d.ts b/src/components/Charts/ChartCard/index.d.ts index ae25ec64..0437c0c8 100644 --- a/src/components/Charts/ChartCard/index.d.ts +++ b/src/components/Charts/ChartCard/index.d.ts @@ -1,5 +1,5 @@ -import * as React from 'react'; import { CardProps } from 'antd/lib/card'; +import * as React from 'react'; export interface IChartCardProps extends CardProps { title: React.ReactNode; diff --git a/src/components/Login/LoginItem.d.ts b/src/components/Login/LoginItem.d.ts new file mode 100644 index 00000000..30a7a2d6 --- /dev/null +++ b/src/components/Login/LoginItem.d.ts @@ -0,0 +1,11 @@ +import * as React from 'react'; +export interface ILoginItemProps { + name?: string; + rules?: any[]; + style?: React.CSSProperties; + onGetCaptcha?: () => void; + placeholder?: string; + buttonText?: React.ReactNode; +} + +export class LoginItem extends React.Component {} diff --git a/src/components/Login/Tab.d.ts b/src/components/Login/Tab.d.ts new file mode 100644 index 00000000..db651f7b --- /dev/null +++ b/src/components/Login/Tab.d.ts @@ -0,0 +1,7 @@ +import * as React from 'react'; + +export interface ILoginTabProps { + key?: string; + tab?: React.ReactNode; +} +export default class LoginTab extends React.Component {} diff --git a/src/components/Login/index.d.ts b/src/components/Login/index.d.ts index 9c072867..6a6f67fe 100644 --- a/src/components/Login/index.d.ts +++ b/src/components/Login/index.d.ts @@ -1,34 +1,20 @@ -import * as React from 'react'; import Button from 'antd/lib/button'; -export interface LoginProps { +import * as React from 'react'; +import LoginItem from './LoginItem'; +import LoginTab from './LoginTab'; + +export interface ILoginProps { defaultActiveKey?: string; onTabChange?: (key: string) => void; style?: React.CSSProperties; onSubmit?: (error: any, values: any) => void; } -export interface TabProps { - key?: string; - tab?: React.ReactNode; -} -export class Tab extends React.Component {} - -export interface LoginItemProps { - name?: string; - rules?: any[]; - style?: React.CSSProperties; - onGetCaptcha?: () => void; - placeholder?: string; - buttonText?: React.ReactNode; -} - -export class LoginItem extends React.Component {} - -export default class Login extends React.Component { - static Tab: typeof Tab; - static UserName: typeof LoginItem; - static Password: typeof LoginItem; - static Mobile: typeof LoginItem; - static Captcha: typeof LoginItem; - static Submit: typeof Button; +export default class Login extends React.Component { + public static Tab: typeof LoginTab; + public static UserName: typeof LoginItem; + public static Password: typeof LoginItem; + public static Mobile: typeof LoginItem; + public static Captcha: typeof LoginItem; + public static Submit: typeof Button; } diff --git a/src/components/PageHeader/breadcrumb.d.ts b/src/components/PageHeader/breadcrumb.d.ts index ce6e6244..cfed4021 100644 --- a/src/components/PageHeader/breadcrumb.d.ts +++ b/src/components/PageHeader/breadcrumb.d.ts @@ -1,6 +1,6 @@ import * as React from 'react'; -import { IPageHeaderProps } from './index' +import { IPageHeaderProps } from './index'; export default class BreadcrumbView extends React.Component {} -export function getBreadcrumb(breadcrumbNameMap: Object, url: string): Object; +export function getBreadcrumb(breadcrumbNameMap: object, url: string): object; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..5be30831 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "outDir": "build/dist", + "module": "esnext", + "target": "es2016", + "lib": ["es6", "dom"], + "sourceMap": true, + "baseUrl": ".", + "jsx": "react", + "allowSyntheticDefaultImports": true, + "moduleResolution": "node", + "rootDirs": ["/src", "/test", "/mock","./typings"], + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true, + "noUnusedLocals": true, + "allowJs": true, + "experimentalDecorators": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["./src"], + "exclude": [ + "node_modules", + "build", + "scripts", + "acceptance-tests", + "webpack", + "jest", + "src/setupTests.ts", + "tslint:latest", + "tslint-config-prettier" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..125e217e --- /dev/null +++ b/tslint.json @@ -0,0 +1,11 @@ +{ + "extends": ["tslint:latest", "tslint-react", "tslint-config-prettier"], + "rules": { + "no-var-requires": false, + "no-submodule-imports": false, + "object-literal-sort-keys": false, + "jsx-no-lambda": false, + "no-implicit-dependencies": false, + "no-console": false + } +} -- GitLab