2017-09-21 2 views
3

인가가 당신이 한 경우 그런 다음?형 안전 콧수염 템플릿

내-template.mustache

Hello {{name}}! 

index.ts

import { readFileSync, writeFileSync } from 'fs'; 
import * as Mustache from 'mustache'; 

export interface Person { 
    name: string; 
} 

const hash: Person = { 
    name: 'Jon' 
}; 

const template = readFileSync('my-template.mustache', 'utf-8'); 

// somehow let the IDE know the hash type 
const result = Mustache.render(template, hash); 

writeFileSync('my-template.html', result, 'utf-8'); 

을 할 수있는 솔루션 :

my-template.mustache

,210
Hello {{name}}, {{age}} <!-- red squiggles under age --> 

그래서 age 유형 사람 해시 유형의 속성없는 사람 그래서 당신이 age에서 빨간색 구불 거리는 곡선을 얻을 수있다. Visual Studio 코드에서 작동하는 메커니즘이 바람직합니다.

업데이트 :
명확하게하려면 Hello {{name}}, {{age}} <!-- red squiggles under age -->은 내가 달성하려고하는 것이지 문제는 아닙니다.

답변

-1

한 가지 방법은 인터페이스를 사용하는 대신 유형을 선언하는 것입니다. 타입 선언 함수는 Traits으로 약간 씁니다. 다음에서는 모든 JS Object를 새 속성이있는 유형으로 매핑 할 수 있지만 주어진 속성에 대해 잘못된 유형을 사용하려고하면 실패합니다.

import { readFileSync, writeFileSync } from 'fs'; 
import * as Mustache from 'mustache'; 

export interface PersonWithName { 
    name: string; 
} 

export declare type Person = PersonWithName | any; 

const hash: Person = { 
    name: 'Jon' 
}; 

const hashWithAge: Person = { 
    name: 'Jon', 
    age: 10, 
    newAge: 20 
}; 

const template = readFileSync('my-template.mustache', 'utf-8'); 
+0

사람은 단지 하나의 예입니다. 나이를 먹으면서 "빨간 삐걱 소리가 들린다"는 것은 내가 겪고있는 문제가 아니라 (유형 안전성) 달성하려는 것입니다. –